关于prototype模式

songsd 2003-01-15 11:05:18
在<<设计模式--面向对象可复用技术>>书中,看prototype模式,看了几遍,始终不理解他讲的是什么,我想可能java里面有了clone这个方法,实现这个模式可能很容易,但是对书中讲的是什么意思不太理解,谁能讲一下
...全文
68 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
DavidBone 2003-04-20
  • 打赏
  • 举报
回复
up
DavidBone 2003-04-20
  • 打赏
  • 举报
回复
up
super_zzw 2003-01-29
  • 打赏
  • 举报
回复
关键就是如果要一个对象具有完整的clone特性,必须让它的所有属性具有clone属性而且必须层层clone.否则只是浅层clone.
richardluopeng 2003-01-28
  • 打赏
  • 举报
回复
不是反不反的问题,这两个模式是相互竞争的模式,根本就没有必要一起用,除非你非要把他拧在一起!!!
merlinran 2003-01-28
  • 打赏
  • 举报
回复
你把制造和复制的先后顺序搞反了。复制总得基于一个本来存在的对象,所以有制造的需要。因为原型只需要一个,这里的工厂可以不像普通的那样从堆中分配对象然后返回给用户,而是返回一个静态实例给用户,类似于多件。
richardluopeng 2003-01-27
  • 打赏
  • 举报
回复
不是呀,对于一个object,你都已经clone出来了,你要拿工厂来制造它,干吗,有必要吗???
richardluopeng 2003-01-25
  • 打赏
  • 举报
回复
简单的说,就是clone,呵呵

楼主,之所以没有看明白,我想是因为它有些判断,判断clone 是不是正确,因为有很多种的object,要时间prototype模式,需要改写其clone方法,需要保证clone的方法正确,举个例子来说,

人这个对象是可以clone的,但是clone的结果得到一个猴子,那它是失败的,呵呵,如果得到一个人,那基本上是成功的,就是clone出来一个人,是不是面貌一模一样,还是允许有一定程度的差别,所谓的深clone和浅clone(我也没有完全看明白,:))

楼上的,原型方法和工厂结合一般不和结合的,呵呵



请多多指教!谢谢!
merlinran 2003-01-25
  • 打赏
  • 举报
回复
谁说不可结合呢?只要觉得合适,就可以用。当然,基于实践者的水平,可能会误用,但圣贤没有教我们什么模式在什么时候用了会有什么不良结果,或者哪两个混用会有什么化学反应。只有自己亲身经历,才知道什么时候是误用,才能在以后的实践中避免。

我的看法是:只有对象本身才知道怎样复制自我,只要clone操作定义得恰当,是不可能由人clone出猴子的,实际上,人和猴子对对方的结构都是不清楚的,只对自己的结构了如指掌。

原型本身不一定就得全程可见,也可以按需创建。复制时无需知道被复制对象的准确类型,是原型方法的核心;创建时无需知道被创建对象的准确类型,是抽象工厂的好处。我不觉得二者有什么冲突。
merlinran 2003-01-17
  • 打赏
  • 举报
回复
上面老兄讲的是proxy,不是prototype。

对prototype,我的理解是:因为你是用一个基类的引用来得到实际对象的,不知道对象的实际类型是什么,当然也不能拷贝一个它的实例,只有派生类自己才知道怎么拷贝自己。
比如:
Image *anImage=CreateImage(filename);
Image *anotherCopy=anImage.clone();
因为你不知道CreateImage返回的到底是一个什么Image,你只能让对象自己来负责拷贝自己。
注:这里为简明起见,不像GoF的书中那样,事先把原型都建好了,而是把原型方法和工厂结合,由此可见,设计模式是灵活运用的,它本身是来自于编程实践,当然也要与实践相结合。
fangss 2003-01-16
  • 打赏
  • 举报
回复
对象和代理对象并不是完全相同的.

书中讲到,如果打开一个文档包含图片对象时,load的时间会增加.
可是我们如果用一个代理对象来代理图片对象时,文档打开就会很快(不显示的图片可以先不load).
在需要时load图片.
james_razor 2003-01-16
  • 打赏
  • 举报
回复
对接口或者抽象类的操作,都可以得到对象的原始形态,此所谓“原型”是也。原型的应用之一就是消除和类继承体系平行的Abstract Factory继承体系。

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧