您的位置:首页 > 其它

对于抽象工厂设计模式的理解

2018-02-14 14:39 141 查看
阅读了CSDN上的博文,记录自己的理解:

抽象工厂中的两个概念:



产品等级结构

产品族

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

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

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

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

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

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

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

(4)产品等级结构稳定,设计完成之后,不会向系统中增加新的产品等级结构或者删除已有的产品等级结构。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: