幸运星空

Lucker的程序人生

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

(根据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来实例化。客户程序只需要操作类库提供的三个接口就可以实现不同系列的产品的实例化。

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

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

《完》

posted on 2011-12-16 17:22  Lucker  阅读(676)  评论(1编辑  收藏  举报