工厂模式 -- 抽象工厂

来源:互联网 发布:淘宝网店能转让吗 编辑:程序博客网 时间:2024/04/28 04:11

有几点需要明确:

1. 客户端按族来创建产品(通过类图,可以看到)而工厂方法(简单工作)所对应的产品,是没有产品族的概念的,

    或者说,不是按产品族(产品功能)来创建产品的。

2. 这些产品不能抽象到一个接口或抽象类中

这是,需要使用抽象工厂来完成产品的创建。

 

在以下情况下应该考虑使用抽象工厂模式:

  • 一个系统不应该依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。
  • 同属于同一个产品族的产品是在一起时用的,这一约束必须在系统的设计中体现出来。
  • 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。

开-闭原则要求一个软件系统在不修改原有代码的情况下,通过扩展达到增强功能的目的。与iyuyige设计到多个产品等级结构和多个产品族的系统,其功能的增强无外乎是增加新的产品族,和增加新的等级结构。

  • 增加新的产品族,只需要在每个产品等级结构中增加新的具体产品角色。然后加入新的具体工厂就可以了。
  • 增加新的产品等级结构,需要多出一个与现有的产品等级结构平行的新的产品等级结构。而且需要给每个工厂类添加新的工厂方法,而这是违背"开-闭"原则的。
  • 综合起来,抽象工厂模式以一种倾斜的方式支持增加新的产品,它为新产品族的增加提供方便,而不能为新的产品等级结构的增加提供这样的方便。

 

采用抽象工厂模式设计出的系统类图如下所示:

原创粉丝点击