天天看点

Aha!设计模式(23)-工厂方法(4)

5. 结 构

Aha!设计模式(23)-工厂方法(4)

光从类图的角度来看,工厂方法和抽象工厂的类图都存在平行的product和creator(或factory)类,不同的是在工厂方法模式中:

  1. 每个creator只有一个构建方法。
  2. creator还会有构建方法以外的操作。
  3. 作为派生类的ConcretCreator/ConcreateProduct只有一套,也就意味着替换派生类不是这个模式的主要目的。

6. 参与者

• Product(Document)

— 定义工厂方法所创建的对象的接口。

• ConcreteProduct(MyDocument)

— 实现Product接口。

• Creator(Application)

— 声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的 ConcreteProduct对象。

— 可以调用工厂方法以创建一个Product对象。

• ConcreteCreator(MyApplication)

— 重定义工厂方法以返回一个ConcreteProduct实例。

工厂方法模式的核心参与者是Creator和ConcreteCreator,这两个Creator加上两个Product就构成了抽象工厂模式。

7. 协作

• Creator依赖于它的子类来定义工厂方法,所以它返回一个适当的ConcreteProduct实例。

出于主动的或者被动的原因,Creator类将构建某种产品的职责委托给子类。

作者观点

构建Product只是Creator的一部分功能,是副业。这一点很重要。

注:

本文中蓝色粗体文字都引自《设计模式》一书。

继续阅读