Programming 版 (精华区)
发信人: Sun (大灯泡), 信区: SoftEng
标 题: [Design Pattern]Prototype
发信站: 哈工大紫丁香 (2001年03月17日00:39:37 星期六), 站内信件
发信人:Crystal_Y (小衲) 版面名称:SoftEng(723)
标 题:[Design Pattern]Prototype
发信站:中国科大BBS站 (Fri, 16 Mar 2001 10:57:58 )
标 记:精华
Prototype的特点就是......clone呵呵
仍然是Factory Method里提到的问题,在设计之初,未知那些可能的products如何
创建,又确定以后肯定会创建,那么现在该怎么办?可以对每一种product搞一个Factory
Method,而如果不想产生Factory Method容易产生的平行结构,则可以用Prototype。
(在它们的基础上,如果product们存在family的特征,可以再搞一个Abstract Factory)
对象的组合比起类的继承,往往要更灵活,给创建product的函数一个参数,类型是
product的基类类型,那么在创建过程中,调用它的clone(),Polymorphism自然可以
在运行时刻产生出具体的product来,只要正确的product实例能被传递。
由此,那个传递进来的东西,被称作Prototype。
Prototype还有一个意思,它是一开始就有了的,而且在程序其它地方不会用到,
只是一个原型(虽然说可以不必那么死板,但是不使用prototype至少保证不会出现
什么空指针引用的问题)
有了Prototype的clone,我们可以对动态调用的对象进行创建,把刚刚加载的
对象作为一个原型交给创建函数就可以了(当然,这个对象必须继承于创建函数
知道的某一个类),啊,dynamically loading,run-time configuration等等,
都会让程序变得更灵活呵呵。
实现的方式,不需要非传递一个对象指针不可,只要是个identifier能够让
创建函数找到真正的prototype就行,因此,往往会有一个prototype manager,它
保存了一堆可能被clone的原型,提供注册、注销等操作。
clone操作,还是比较复杂的,当被clone的对象本身又包含其它对象的时候,这
需要作出选择,是只复制一个指针(shallow copy),还是再创建一些对象(deep copy),
根据具体情况而定。GoF特别指出,如果需要deep copy,而那些对象又支持存取,倒
是挺简单,往内存里一存,再一取,就行了呵呵。
clone操作一般是没什么参数的,如果要给被clone出来的对象马上进行一些设置,
只能说创建函数提供参数,在clone出新的对象后,调用它的initialize()。这样能
保证clone()接口的一致性。
URL:http://202.38.79.111/GoF/pat3dfs.htm
--
我很差劲!
我是一个不务正业的人!
因为,在我这个年纪,
正业是找女朋友。
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: sunner.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.985毫秒