【2013.1.20】设计模式C++ 实现——ProtoType
// // // // // // // // //
///2013.1.20
// // // // // // // // //
还记得小的时候看哆啦A梦,
里面有一话讲到大雄用一个神奇的工具,
好像是一个灯之类的东西,
照一照点心,
点心就会自动复制到无限多(2^n)。
先不管这是不是一件让人羡慕的事情,
但是这个道具,无意间实现了我们今天所要讲的模式——Prototype。
【核心】使用复制(Clone)代替创建(new)对象。
UML图表示:
从表面上看,
与其说是一个模式,
倒不如说是一种复制行为更为贴切。
然而,
这其中,却隐藏着另一个难以察觉的问题。
它涉及到了对象拷贝的两种方式:
——深拷贝与浅拷贝。
在探讨这个两种拷贝方式的区别之前,
首先要提到&这个运算符:
一般情况下,
它的使用方法与指针类似(但不是相等),
&a表示的是a的引用。
一个最简单的使用方法如下所示:
【注意事项】
如上图所示,在调用copyDessert方法之后,浅克隆的数量却没有增加,但这与我们程序的原有设想是相违背的。
因此,在自己编写的类中,要记得对复制构造函数进行override,从而降低Bug发生概率。