抽象工厂模式(Abstract Factory)

抽象工厂模式(Abstract Factory)提供一个创建一系列或相关依赖对象的接口,而无需指定它们具体的类。

 

UML类图

AbstractFactory

AbstractProductA和AbstractProductB是两个抽象产品接口,之所以为抽象,是因为他们都有可能有两种不同的实现,而ProductA1、ProductA2和ProductB1、ProductB2就是对两个抽象产品接口的具体分类的实现。

AbstractFactory是一个抽象工厂接口,它里面应该包含所有产品创建的抽象方法。而ConcreteFactory1和ConcreteFactory2就是具体的工厂。

通常是在运行时再创建一个ConcreteFactory类的实例,这个具体的工厂再创建具有特定实现的产品对象,也就是说,为创建不同的产品对象,客户端应使用不同的具体工厂

 

代码实现

AbstractProductA接口

ProductA1类

ProductA2类

AbstractProductB接口

ProductB1类

ProductB2类

AbstractFactory接口

ConcreteFactory1类

ConcreteFactory2类

 

Client类

 

优点

  • 易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。
  • 它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中。

 

缺点

  • 如果增加新的Product则需要添加大量的代码,如:增加AbstractProductC接口,ProductC1类、ProductC2类,并且需要修改AbstractFactory接口和ConcreteFactory1与ConcreteFactory2类。
  • 和工厂方法模式一样,客户端需要决定实例化哪个工厂来实现运算类,选择判断的问题还是存在。

 

参考文献

  • 《大话设计模式》 作者:程杰,清华大学出版社
  • 《Java与模式》 作者:阎宏,电子工业出版社

 

 

 

Categories: 设计模式