美文网首页Android 开发模式和优秀框架那些事
设计模式之二十三——工厂方法模式

设计模式之二十三——工厂方法模式

作者: dd299 | 来源:发表于2019-07-02 13:42 被阅读3次

原文传送门

1 介绍

工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。

1.1 什么是工厂方法模式

工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。

1.2 解决了什么问题

我们明确地计划不同条件下创建不同实例时,工厂模式解决了接口选择的问题。

2 原理

在工厂方法模式中有如下角色:

  1. 抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义;
  2. Creator为抽象创建类,也就是抽象工厂。
  3. ConcreteCreator,具体实现工厂。具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的。

2.1 uml图

通用类图

2.2 代码示例

Product代码示例

public abstract class Product {    
     //产品类的公共方法
     public void method1(){
             //业务逻辑处理
     }  
     //抽象方法
     public abstract void method2();    
}

ConcreteProduct代码示例

public class ConcreteProduct1 extends Product {
     public void method2() {
             //业务逻辑处理
     }
}
public class ConcreteProduct2 extends Product {
     public void method2() {
             //业务逻辑处理
     }
}

Creator代码示例

public abstract class Creator {    
     /*
      * 创建一个产品对象,其输入参数类型可以自行设置
      * 通常为String、Enum、Class等,当然也可以为空
      */        
     public abstract  T createProduct(Class c);
}

ConcreteCreator代码示例

public class ConcreteCreator extends Creator {     
     public  T createProduct(Class c){
             Product product=null;
             try {
                    product = (Product)Class.forName(c.getName()).newInstance();
             } catch (Exception e) {
                    //异常处理
             }
             return (T)product;         
     }
}

调用示例

public class Client {
     public static void main(String[] args) {
             Creator creator = new ConcreteCreator();
             Product product = creator.createProduct(ConcreteProduct1.class);
             /*
              * 继续业务处理
              */
     }
}

2.3 优缺点

  • 优点

    • 良好的封装性,代码结构清晰。
    • 工厂方法模式的扩展性非常优秀。
    • 屏蔽产品类。
    • 工厂方法模式是典型的解耦框架。
  • 缺点
    每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。

3 适用场景

  1. 工厂方法模式是new一个对象的替代品,所以在所有需要生成对象的地方都可以使用,但是需要慎重地考虑是否要增加一个工厂类进行管理,增加代码的复杂度。
  2. 需要灵活的、可扩展的框架时,可以考虑采用工厂方法模式。万物皆对象,那万物也就皆产品类。比如:日志记录器。
  3. 工厂方法模式可以用在异构项目中,比如:数据库访问。再比如:设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。
  4. 可以使用在测试驱动开发的框架下。

4 总结

作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。


参考书籍及文章
1.《Java与模式》,电子工业出版社,阎宏

  1. 《大话设计模式》,清华大学出版社,程杰
  2. 《设计模式——可复用面向对象软件的基础》,机械工业出版社,Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides
  3. 《设计模式之禅》,https://www.kancloud.cn/sstd521/design/193522

相关文章

  • 2018-11-05iOS&二十三种设计模式&快速记忆

    二十三种设计模式,分为三大类:一、创建型设计模式,共五种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模...

  • 二十三种设计模式包括工厂模式、建造者模式、工厂方法模式、原始模型模式、单例模式、适配器模式、桥梁模式、合成模式、装...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 设计模式之工厂方法模式(创建型)

    一、模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进...

  • spring 设计模式篇(前)

    设计模式俗称:套路 一、spring常见设计模式 (23种设计模式) 创建型:工厂方法模式、抽象工厂模式、建造者...

  • 设计模式系列-简单工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 定义 简单工厂模式又叫做静态工厂方法模式...

  • 简单工厂模式

    Android进阶之设计模式 简单工厂模式 简单工厂模式(又叫作静态工厂方法模式), 其属于创建型设计模式,但并不...

网友评论

    本文标题:设计模式之二十三——工厂方法模式

    本文链接:https://www.haomeiwen.com/subject/dauucctx.html