回复关系:

作者 内容
 ltxd   关于模式prototype, 兄弟我有个地方就是不明白

Prototype中的clone方法的实现我觉得挺奇怪的,按照用这个模式的动机是动态装载,为什么非得要实现什么deep copy 或shallow copy, 照我的理解实现这个方法的类new 一个它自己不就得了.其实我觉得clone这个名字就不对,应该叫newinstance之类的, 免得误解.

请哪们高手指点一下

谢谢!
 02/04/09 16:53 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 idlecrook   回复: 关于模式prototype, 兄弟我有个地方就是不明白

设计模式我也刚刚开始看,帮不了你
 02/04/10 08:56 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 liyonghai@163.net   回复: 关于模式prototype, 兄弟我有个地方就是不明白

我也是不懂,但可以聊聊。
首先,clone 和 new是大大的不同的。
再次,prototype 样式可以让使用者不需要具有类的观念(这在将来会很有用)
,使用者可以通过创建一个prototype来生成所要得对象,而不是去重新new a class.
prototype样式想法很好,不过我觉得目前国内可能很少有系统用的上。
 02/04/10 09:21 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 joy_wind  首先,clone和new 有一个最大的区别

在面向对象的环境里,在你new一个对象时,你必须在开发时期就要知道这个对象的类型比如new Dog()。但是clone是不一样的,一个Animal的变量可以通过克隆的方法获得一个Dog的实例,如果Dog继承自Animal并且override了clone方法, 不是吗?通过pototype系统具有了在运行期决定类型的能力。

我隐约感到这种设计为象java这样的强类型语言提供的收益并不大,这一点原作者也提到了。因为我不用c++,所以对这种设计所带来的好处没有切身体会。
 02/04/10 10:23 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 ltxd   可能兄台误解我的意思了

我当然知道prototype是实现了在运行时实例化类,我的意思是在clone方法中只是简单地return new MYCLASS就得了,干嘛非得要实现什么copy,如下

class CAbstracPrototype
{
public:
virtual CAbstracPrototype * clone();
};

class CConcretePrototype1:public CAbstracPrototype
{
public:
virtual CConcretePrototype1 * clone()
{
return CConcretePrototype1;
}
};

也就是如上所示,在CConcretePrototype1中clone实现就如上所示就可以了,为什么非得实现什么深copy或浅copy.
而且我认为clone 这个函数的名字就没有取对,应该取为NewInstance就可以了.

不管怎么样,谢谢你!
 02/04/10 15:03 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 huangke   回复: 关于模式prototype, 兄弟我有个地方就是不明白

我想是因为new创建的是一个初始的对象,对象的属性为初始值。
clone创建的是一个已有对象的克隆,新对象的属性值也被完整克隆。
 02/04/10 15:29 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 joy_wind  回复: 可能兄台误解我的意思了

我又看了一下原著中的prototype模式的例子代码,它的clone方法的实现就是像你所说的返回了一个new instance ,没错呀!以下是他的两个实现:
Door* Door::Clone () const {
return new Door(*this);
}

Wall* BombedWall::Clone () const {
return new BombedWall(*this);
}

在第二个实现中,子类重载的clone方法返回了一个父类的指针,这就是prototype模式的关键,“它使特殊的子类对客户类不可知。”(翻译的蹩脚了点,不好意思,嘻嘻 :-(
 02/04/10 18:03 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价: