5. 结 构

\"\"

光从类图的角度来看,工厂方法和抽象工厂的类图都存在平行的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的一部分功能,是副业。这一点很重要。

 

注:

 

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

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

\"\"

收藏 打印