Programming 版 (精华区)
发信人: Sun (大灯泡), 信区: SoftEng
标 题: [Design Pattern] Factory Method
发信站: 哈工大紫丁香 (2001年03月15日09:09:10 星期四), 站内信件
发信人:Crystal_Y (小衲) 版面名称:SoftEng(602)
标 题:[Design Pattern] Factory Method
发信站:中国科大BBS站 (Wed, 14 Mar 2001 15:26:25 )
标 记:精华
Factory Method这个Pattern应该是最基本最常见的一类了。
在运行时刻,当程序需要产生一个很明确的对象了(即ConcreteProduct),
我们调用一个Factory Method,像是交给工厂一个任务,然后它制造出你所
需要的对象。那么,这个工厂是和你这个ConcreteProduct对应的,是个
ConcreteCreator。如果你的程序里有各种ConcreteProduct,而且这些对象
是有共同之处的,那么我们可以定义一个ConcreteProduct的基类Product,
再定义一个抽象的工厂Creator,在Creator里面声明一个Factory Method,
然后每一个ConcreteProduct对应实现一个ConcreteCreator,这就是这个Pattern
的基本结构~
为什么不在程序里直接new一个ConcreteProduct呢?
因为设计程序的过程,与上面谈的过程相反,是从抽象到具体,在
一个程序的初步框架里,本来就有Product的概念,在你知道
将来会出现各种ConcreteProduct而现在又不需要关心它们如何实现的
条件下,就通过一个抽象的Creator和同样抽象的函数Factory Method,
使得在这个初步框架里就可以创建Product以及将来的ConcreteProduct,而不会
因为对于ConcreteProduct细节的未知而无法设计现在的框架。
Factory Method的实现有两种不同的方式,一种,对于Creator里的
Factory Method,什么都不做,整个Creator是个抽象类;另一种,Creator里的
Factory Method提供了一种缺省的创建方式,这样一来,子类就有可能对这个缺省
的创建方式进行重载,给子类提供了一个hook。
通常Factory Method会造成一种parallel class hierarchies,ConcreteProduct
和ConcreteCreator是平行一一对应的,这尤其适合于Helper这个概念,这在GoF那本
书里讲得挺详细。(今天看到J2EE里有个View Helper这个Pattern)
如果不想造成这种局面的话,可以给Creator提供一个参数,一般是一个类型的ID,
让它根据这个ID来创建不同的ConcreteProduct,只是这样一来,Creator就要了解
ConcreteProduct的信息了,这种方式,适合于对象到storage的存取。
--
※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn]
----------------------------------------------------------------------------
----
--
我很差劲!
我是一个不务正业的人!
因为,在我这个年纪,
正业是找女朋友。
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: sunner.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.293毫秒