抽象工厂模式(Abstract Factory Pattern)

一、概念

 前面2种模式(简单工厂模式和工厂模式)都是创建单一的产品,即一个工厂只生产一种产品,但是大部分的工厂都是多元产品的,

  • 譬如:美的工厂生产空调,风扇,电饭煲,机器人;格力工厂: 空调,冰箱,电饭煲。以上两种模式都不可以实现。抽象工厂模式就是解决此类问题的;

  • 抽象工厂模式(Abstract Factory Pattern):顾名思义,对工厂进行抽象,在一个工厂里聚合创建多个同类产品、同系列产品方法,无须指定产品具体的类型,就可以获取指定对象。

二、参与者

抽象产品:

具体产品:

抽象工厂:声明了工厂方法

具体工厂:具体的工厂方法,实现了抽象工厂,用来生产具体的产品

调用者:

三、代码例子

BMW320工厂 生产 BMW320变速箱和BMW320引擎

BMW520工厂 生产 BMW520变速箱和BMW520引擎

抽象产品:Engine  和  GearBox

具体产品:BMW320Engine、BMW520Engine  和  BMW320GearBox、BMW520GearBox

抽象工厂:AbstractFactory

具体工厂:BMW320Factory  和  BMW520Factory

四、UML图

 

五、特点

  1. 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
  2. 抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。

六、优缺点

(一)优点

  • 一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象(将一个系列的产品统一一起创建);

(二)缺点

  • 产品族扩展非常困难,要增加一个系列的某一产品,既要修改工厂抽象类里加代码,又修改具体的实现类里面加代码;
  • 增加了系统的抽象性和理解难度;

七、抽象工厂模式与工厂方法模式区别

工厂方法模式:

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

抽象工厂模式:

  • 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
  • 一个抽象工厂类,可以派生出多个具体工厂类。
  • 每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。

其他区别:

  • 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个;
  • 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个;
  • 抽象工厂更像工厂,可以生产不同类的产品。而工厂方法则更像是工厂的一种产品生产线,生产同类不同规格的产品。

八、总结

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

posted @ 2022-12-02 11:43  ImreW  阅读(445)  评论(0编辑  收藏  举报