用原型实例创建对象的种类,并且通过拷贝这些原型创建新的对象。其实就是从一个对象再创建另一个可定制的对象,而且不知道任何创建的细节。
原型模式中客户端并不知道要克隆对象的实际类型,只需知道基类类型就可以。
克隆对象比直接创建对象的优点在于,克隆是将原有对象行为属性带到了新的对象中。
C++没有克隆方法,要克隆一个对象,需要借助拷贝构造函数来实现。拷贝构造函数中实现拷贝的对象有浅拷贝和深拷贝。浅拷贝是指对象复制时,只是对象中的数据成员进行值拷贝。深度拷贝是指对象赋值时,对于对象的简单数据成员进行值拷贝,对于对象中的动态成员,需要重新分配动态空间。
浅复制,被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象(把所有对象复制一遍)。
深复制,把引用对象的变量指向复制过的新对象,而不是原有对象。
//浅复制
class Property
{
public:
explicit Property(){}
virtual ~Property(){}
virtual Property* Clone() = 0;
};
class ConcretePro1 : public Property
{
public:
explicit ConcretePro1(){}
virtual ~ConcretePro1(){}
explicit ConcretePro1(const ConcretePro1& ui)
{
this->yu = ui.yu;
}
virtual Property* Clone()
{
return new ConcretePro1(*this);
}
int yu;
};
int _tmain(int argc, _TCHAR* argv[])
{
ConcretePro1 *yu3 = new ConcretePro1;
yu3->yu = 8;
ConcretePro1 *yt = (ConcretePro1 *)yu3->Clone();
}