zoukankan      html  css  js  c++  java
  • 应用最广泛的模式-工厂方法模式

    1、工厂方法模式的定义:

    定义一个用于创建对象的接口,让子类决定实例化哪个类。

     1 /**抽象产品类**/
     2 
     3 public  abstract class Product{
     4 
     5 //产品类的抽象方法
     6 
     7 //由具体的产品类去实现
     8 
     9 public abstract void method();
    10 
    11 }
     1 /**具体产品类A**/
     2 
     3 public class ConcreteProductA extends Product{
     4 
     5 @Override
     6 
     7 public void method(){
     8 
     9 System.out.println(“我是具体的产品A”);
    10 
    11 }
    12 
    13 }
     1 /**具体产品类B**/
     2 
     3 public class ConcreteProductB extends Product{
     4 
     5 @Override
     6 
     7 public void method(){
     8 
     9 System.out.println(“我是具体的产品B”);
    10 
    11 }
    12 
    13 }
     1 /**抽象工厂类**/
     2 
     3 public abstract class Factory{
     4 
     5 //抽象工厂方法
     6 
     7 //具体生产什么由子类去实现
     8 
     9 //@return 具体的产品对象
    10 
    11 public abstract Product createProduct();
    12 
    13 }
     1 /**具体工厂类**/
     2 
     3 public class ConcreteFactory extends Factory{
     4 
     5 @Override
     6 
     7 public Product createProduct(){
     8 
     9 return new ConcreteProductA();
    10 
    11 }
    12 
    13 }
     1 /**客户类**/
     2 
     3 public class Client{
     4 
     5 public static void main(String[] args){
     6 
     7 Factory factory = new ConcreteFactory();
     8 
     9 Product p = factory.createProduct();
    10 
    11 p.method();
    12 
    13 }
    14 
    15 }

    2、通过反射的方式更简洁地来生产具体产品对象:

     1 /**抽象工厂类**/
     2 
     3 public abstract class Factory{
     4 
     5 //抽象工厂方法
     6 
     7 //具体生产什么由子类去实现
     8 
     9 //@param clz 产品对象类类型
    10 
    11 //@return 具体的产品对象
    12 
    13 public abstract <T extends Product> T createProduct(Class<T> clz);
    14 
    15 }
     1 /**具体工厂类**/
     2 
     3 public class ConcreteFactory extends Factory{
     4 
     5 @Override
     6 
     7 public <T extends Product> T createProduct(Class<T> clz){
     8 
     9 Product p = null;
    10 
    11 try{
    12 
    13 p = (Product) Class.forName(clz.getName()).newInstance();
    14 
    15 }catch(Exception e){
    16 
    17 e.printStackTrace();
    18 
    19 }
    20 
    21 return (T) p;
    22 
    23 }
    24 
    25 }
     1 /**客户类**/
     2 
     3 public class Client{
     4 
     5 public static void main(String[] args){
     6 
     7 Factory factory = new ConcreteFactory();
     8 
     9 Product p = factory.createProduct(ConcreteProductB.class);
    10 
    11 p.method();
    12 
    13 }
    14 
    15 }
  • 相关阅读:
    delete 用法总结
    js数组去重的常用方法总结
    学习中 常用到的string内置对象方法的总结
    Array 对象常用的方法总结
    javascript中运算符有哪些? 他们的优先级 呢?
    那些年前端经典面试题
    HHVM 3.0 发布,执行 PHP 的虚拟机
    【问底】徐汉彬:PHP7和HHVM的性能之争 (真是学到了很多)
    mysql 简单sql语句
    【问底】王帅:深入PHP内核(一)——弱类型变量原理探究
  • 原文地址:https://www.cnblogs.com/vijozsoft/p/5575875.html
Copyright © 2011-2022 走看看