记录自己的理解:

抽象工厂中的两个概念:

海尔集团的组织架构图 海尔集团企业组织结构_设计模式

  1. 产品等级结构
  2. 产品族

以海尔和海信两个公司为例,两个公司都生产电视机,那末海尔电视机海信电视机就是一个产品等级结构,而海尔电视机海尔电冰箱就是一个产品族。因此可以理解为海尔家的所有产品例如海尔电视机、海尔电冰箱等构成一个产品族,海尔公司看作是一个具体工厂。

另外说明抽象工厂模式对于增加新的产品族方便,增加新的产品登记结构麻烦,有的也说横向扩展容易,纵向拓展麻烦,根据上面的示例图也容易理解。

一般来说,一个产品等级结构都继承自一个公共的抽象类或实现一个公共接口,增加一个产品族时(看作新成立了一家公司:)),则只需要增加新的产品类和对应的具体工厂类即可;另一种情况是对着技术的发展市面上的洗衣机创新出了新的功能,如半自动洗衣机向全自动洗衣机换代,因此每个公司都将自己的洗衣机升级,此时的洗衣机功能也有所增加,在此模式下,就需要更改顶层的抽象类或接口,在其中添加新的方法,则所有的实现类也要做相应的修改,违背了”开闭原则”。

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

(1)一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有类型的工厂模式都是很重要的,用户无须关心对象的创建过程,将对象的创建和使用解耦。

(2)系统中有多于一个的产品族,而每次只使用其中某一产品族。可以通过配置文件等方式来使得用户可以动态改变产品族,也可以很方便地增加新的产品族。

(3)属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来。同一个产品族中的产品可以是没有任何关系的对象,但是它们都具有一些共同的约束,如同一操作系统下的按钮和文本框,按钮与文本框之间没有直接关系,但它们都是属于某一操作系统的,此时具有一个共同的约束条件:操作系统的类型。

(4)产品等级结构稳定,设计完成之后,不会向系统中增加新的产品等级结构或者删除已有的产品等级结构。