设计模式二--工厂模式

工厂方法

工厂方法定义:定义一个用于创建对象的接口,并且让其子类决定实例化到哪一个类,工厂方法使一个类的实例化延迟到子类

工厂方法角色

1: 抽象工厂角色(Creator)
该角色是工厂方法模式的核心,任何创建对象的工厂类必须实现这个接口

public interface Creator{
  /**
    * 工厂方法,创建产品(对象)的时候输入参数类型即可
    */
  public <T extends Product> T factory(Class<T> c);
}

2:具体工厂角色(Concrete Creator)
该角色实现了Creator接口,受应用程序逻辑控制,应用程序调用此类以获得具体要创建的产品

  public class ConcreteCreator implements Creator{
      
      @override
      public <T extends Product> T factory(Class<T> c){
          Product product = null;
          try{
              product = (Product) Class.forName(c.getName.newInstance());
          }catch(Exception e){
               
          }
          return (T)product;
      }
  }

3:抽象产品角色(Product)
该角色负责定义对外产品的共性,实现对产品的最高抽象定义

 public interface Product{
    //所有产品公共类方法
    public void method1();
    public void method2();
}

4:具体产品角色
该角色是实现了抽象产品接口的具体类,是产品的具体实例

  public class ConcreteProduct implements Product{
        //实现接口方法
       @override
       public void method1(){
          System.out.println("ConcreteProduct.method1()"); 
       }
       @override
       public void method2(){
          System.out.println("ConcreteProduct.method2()")
       }
  }

具体调用代码

这里演示具体如何调用到以上定义的产品

public class Demo{
  public static void main(String [] args ){
    //得到工厂
    Creator creator = new ConcreteCreator();
    //得到具体产品
    Product product = creator.factory(ConcreteProduct.class);
    //调用产品的方法
    product.method1();
    product.method2();
  }
}

工厂方法的优点

1:良好的封装性,代码结构清晰,每个产品对应一个工厂类,所有实例创建均由工厂负责完成
2:比较容易扩展,新增产品或者修改部分产品的业务逻辑并不会改变其创建和调用方式
3:屏蔽了产品类,无论产品如何变化,调用者始终通过接口调用
4:高度抽象,有利于解除耦合

工厂方法使用场景

1:可以替代new关键字
2:当需要灵活的可扩展的框架的时候,可以优先考虑工厂模式
3:可以使用在异构项目中,如webservice与一个非java项目交互,可减少与外围系统耦合
4:可以使用在测试驱动开发的框架下,测试的时候可以避免强耦合关系导致的问题

工厂模式的扩展

1:简单工厂模式
2:多工厂模式
3:替代单例模式
4:延迟初始化

注:以上内容,后期再做补充,在这里不详细做讨论,后期补充链接

参考资料:设计模式之禅(二)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、工厂模式介绍 工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每...
    QuantRuu阅读 769评论 0 51
  • 设计模式概述 在学习面向对象七大设计原则时需要注意以下几点:a) 高内聚、低耦合和单一职能的“冲突”实际上,这两者...
    彦帧阅读 3,796评论 0 14
  • 一、工厂模式介绍 工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每...
    端木轩阅读 12,759评论 1 20
  • 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。通常我们所说的工厂模式是指工厂方法模...
    zfylin阅读 1,336评论 0 7
  • 生命陪伴心语系统: (当下)此刻就是我享受爱,体验爱和表达爱的最大机会。 (过程)深呼吸一,二,三,我看见了我的情...
    白文菊阅读 259评论 0 0