抽象工厂模式

意图

无需指定具体实现子类,就能通过提供的一个接口来创建一系列相关或依赖的对象。

结构图

抽象工厂

参与者

  • AbstractFactory
    • 声明创建抽象产品对象的方法
  • ConcreteFactory
    • 实现创建具体产品对象的操作
  • AbstractProduct
    • 声明某个产品对象类型的接口
  • ConcreteProduct
    • 定义了由对应具体工厂创建的一个产品对象
    • 实现AbstractProduct接口
  • Client
    • 只使用AbstractFactory和AbstractProudct类定义的接口

模式评估

  • 隔离了具体类。
  • 交换产品类型很容易
  • 加强了产品对象之间的一致性。
  • 支持新的产品比较困难。

实现上的一些建议

  • 可以将各个具体工厂类实现为单例。
  • 对于每种产品类,可以使用工厂方法来创建。如果存在许多产品系列,可以使用原型模式来创建产品类。
  • 定义可扩展的工厂类。 可能通过参数化的形式创建不同的具体工厂类。抽象工厂类一般通过工厂方法实现,也可以使用原型模式实现。