Programming 版 (精华区)
发信人: Sun (大灯泡), 信区: SoftEng
标 题: [Design Pattern]Abstract Factory
发信站: 哈工大紫丁香 (2001年03月17日00:41:02 星期六), 站内信件
发信人:Crystal_Y (小衲) 版面名称:SoftEng(702)
标 题:[Design Pattern]Abstract Factory
发信站:中国科大BBS站 (Thu, 15 Mar 2001 14:40:39 )
标 记:精华
Abstract Factory的特点就是你手头上会有若干family的products
在GoF那本书里,你把Abstract Factory结构图上的ProductB全都去掉,
其形状就和Factory Method的结构一样了呵呵
所以它的特点就是你需要管理属于一个family的products,而这个family
又有很多种。
尤其是,你特别希望把很多products约束在一个scope里的话,就把它们组成
一个family,让一个ConcreteFactory来实现创建它们的工作,而让Abstract
Factory来规范它们创建的接口,这种约束在GoF的sample code里说得很清楚,
用C++的话来说,就是保证指针转换不会出错。
如此一来,作不同family之间的切换,就变得很容易了,当然,使用这些
product family的client代码无需更改(这个好处到处都有呵呵)
缺陷就是,如果要加入一个新的family,而这个family所提供products
的接口如果不同于现有的Abstract Factory规范的接口,那么就比较困难了。GoF
谈到一个解决方法,对于用C++的人来说,这个方法是不太好的,是Factory Method
里谈到的一种方法,在创建函数CreateProduct里加一个类型的identifier,这种方
法有两个缺陷:
1.必须了解ConcreteProduct的信息,用Prototype模式可以缓解之,Prototype
将要求如注册这样的函数,以使得CreateProduct在拿到identifier后可以索引到
正确的prototype以进行clone。
2.这样创建返回的是一个抽象类型,在使用它的时候,将不得不作指针转换。
CreateProduct很容易地就可以做成一个Factory Method,这是最简单的实现方式。
而当family很多的时候,如果不想编写同family数目一样多的ConcreteFactory类,
还可以用Prototype,其原则和上面是一样的。
btw:哪位能讲一讲什么叫treat classes as first-class objects这样的语言?
如SmallTalk
--
※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn]
--
如果程序员懂得了软件工程,
那么他就不再是牛,
更不是妓女了。
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: sunner.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.145毫秒