注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Kandy

长风破浪会有时,直挂云帆济沧海!

 
 
 

日志

 
 

[Design Pattern]Prototype [转载]  

2009-05-12 12:23:28|  分类: 设计模式 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
发信人: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()接口的一致性。
  评论这张
 
阅读(204)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017