需求场景:通过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();}
