工厂方法

意图

定义了创建一个对象的接口,但是让子类决定实例化哪个类。工厂方法将一个类的实例化延迟到中。

动机

使用抽象类去定义和维护对象间的关系。

结构图

结构图

参与者

  • Product
    • 定义了工厂方法创建的对象的接口。
  • ConcreteProduct
    • 实现了Product接口
  • Creator
    • 声明工厂方法,返回Product类型的对象。
    • 也可以调用工厂方法创建一个Product对象。
      ConcreteCreator
    • 覆盖工厂方法,返回ConcreteProduct的一个实例。

模式评估

工厂方法省去了将应用相关的类绑定到代码中的需求。代码只需要与Product打交道。但是潜在的劣势是 使用者不得不从Creator类派生以创建一个特别的ConcreteProduct对象。