需求场景:通过new Object()方式创建对象的代价比较大,或者非常麻烦,需要一种更简单高效的方式创建对象。
解决办法:克隆已创建对象,来快速创建对象。
UML
代码设计
struct Prototype{
Prototype();
virtual ~Prototype(); //基类的析构函数必须要是虚函数,才能保证delete基类指针能正确销毁对象。
virtual Prototype* clone(); //原型模式的核心,可以拷贝对象。
//既然是拷贝就是深浅之分
//浅拷贝
// 副本成员的值与原对象相同。
// 指针、引用类成员指向的对象和原对象的是同一个对象。
//深拷贝;
// 副本成员的值与原对象相同。
// 但指针、引用类成员指向的对象是原对象对应对象的副本。
//浅拷贝只拷贝当前对象的成员,对成员引用的对象不拷贝。
//深拷贝会拷贝成员引用的对象。
};
struct PrototypeA{ //PrototypeB类似。
PrototypeA(){};
~PrototypeA(){};
PrototypeA(const PrototypeA&){ //拷贝构造函数,在这里拷贝成员,深浅拷贝就在这决定了。
}
Prototype* clone(){
return new PrototypeA(*this);
}
};
int main(){
Prototype *a = new PrototypeA(), *b = new PrototypeB();
Prototype *copya = a->clone();
Prototype *copyb = b->clone();
}