C#面向对象设计模式第三讲:Abstract Factory Pattern 抽象工厂模式(创建型模式)...

(根据MSDN Webcast相关课程整理)

new的问题:实现依赖,不能应对具体实例化类型的变化。(当实例对象发生变化时,无法满足需求)

例:

clip_image002

当Road发生容易发生变化时,如有可能变成MudRoad时,需要修改系统中所有new 到Road的地方。

解决思路:

封闭变化点——哪儿变化封闭哪儿;如果new的类型比较稳定,基本没有变化时,就不需要封装啦。

创建的对象容易发生变化,因此就要封装对象创建的过程。

面向接口编程:依赖接口,而不是依赖实现

clip_image004

将Road类抽象化,然后创建一系列不同类型的子类,并根据需要在CreateXX方面中实例化它们。好处:当需要变化时,不影响客户程序,只需要修改类库就可以了。

创建一系列相互依赖的对象

clip_image006

这种简单工厂存在的问题:

不能应对“不同系列相系依赖的对象”的变化。如:不同风格的界 面皮肤通常是一系列相系依赖对象的集合,当风格变化时,这一系列对象都应该随之改变。

解决办法:

还是封装变化点。提供一种封装机制来避免客户程序和这种多个系统具体对象创建工作之间的紧耦合。

GOF:提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们的具体的类。

clip_image008

ProductA和B分别具体1和2两个系列,且系列内部的两个产品相互依赖,它们通过ConcreterFactory1和2来实例化。客户程序只需要操作类库提供的三个接口就可以实现不同系列的产品的实例化。

使用抽象工厂模式的情况:

变化的是不同风格,不同系列的组合关系,而不是具体的产品对象发生增减或产品内部的各个部分。

《完》

转载于:https://www.cnblogs.com/luckeryin/archive/2011/12/16/2290479.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值