设计模式——工厂(简单工厂、工厂方法、抽象工厂)

开发过程中经常听到工厂这个词,其实根据个人经验,简单工厂用的是比较多的。工厂方法和抽象工厂是GoF23种设计模式中的一种,而我们常使用的简单工厂并不是一种设计模式,可以说是我们自己的一种俗称。

定义

简单工厂: 直接通过一个Factory类创建多个实体类的构造方式。

工厂方法: 一个抽象产品类,可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。

抽象工厂:个抽象产品类,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品类的实例。

工厂方法与抽象工厂区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

模板

简单工厂

设计模式——工厂(简单工厂、工厂方法、抽象工厂)_第1张图片

工厂方法

设计模式——工厂(简单工厂、工厂方法、抽象工厂)_第2张图片

  1. AbstractProduct : 抽象产品 (在工厂方法模式中只有一个AbstractProduct)
  2. ConcreteProductXXX : 具体的产品类
  3. AbstractFactory: 抽象工厂类
  4. ConcreteFactory: 具体工厂类(每个工厂只能创建一个具体产品)

抽象工厂

设计模式——工厂(简单工厂、工厂方法、抽象工厂)_第3张图片

  1. ProductX : 产品接口(抽象工厂中可以有多个产品抽象类)
  2. ConcreteProductX : 具体产品
  3. Creator: 抽象工厂类(也可以叫Factory,定义了创建多个产品种类的的接口)
  4. ConcreateCreateX: 具体工厂

实例

参考: 浅谈简单工厂,工厂方法,抽象工厂的区别和使用

优点

  1. 将对象的构造与获取隔离
  2. 面向接口编程,可以动态增加Product/Factory,而且方便单元测试
  3. 一般还可以在工厂中统一维护一个单例(单例模式、静态方法)

缺点

  1. 增加了多个类/接口,增加了系统的复杂性

参考:
https://www.cnblogs.com/gclokok/p/10029088.html

你可能感兴趣的:(设计模式——工厂(简单工厂、工厂方法、抽象工厂))