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

阅读了CSDN上的博文,记录自己的理解:

抽象工厂中的两个概念:

这里写图片描述

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

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值