需求场景:通过new Object()方式创建对象的代价比较大,或者非常麻烦,需要一种更简单高效的方式创建对象。
解决办法:克隆已创建对象,来快速创建对象。

UML

点击查看【processon】

代码设计

  1. struct Prototype{
  2. Prototype();
  3. virtual ~Prototype(); //基类的析构函数必须要是虚函数,才能保证delete基类指针能正确销毁对象。
  4. virtual Prototype* clone(); //原型模式的核心,可以拷贝对象。
  5. //既然是拷贝就是深浅之分
  6. //浅拷贝
  7. // 副本成员的值与原对象相同。
  8. // 指针、引用类成员指向的对象和原对象的是同一个对象。
  9. //深拷贝;
  10. // 副本成员的值与原对象相同。
  11. // 但指针、引用类成员指向的对象是原对象对应对象的副本。
  12. //浅拷贝只拷贝当前对象的成员,对成员引用的对象不拷贝。
  13. //深拷贝会拷贝成员引用的对象。
  14. };
  15. struct PrototypeA{ //PrototypeB类似。
  16. PrototypeA(){};
  17. ~PrototypeA(){};
  18. PrototypeA(const PrototypeA&){ //拷贝构造函数,在这里拷贝成员,深浅拷贝就在这决定了。
  19. }
  20. Prototype* clone(){
  21. return new PrototypeA(*this);
  22. }
  23. };
  24. int main(){
  25. Prototype *a = new PrototypeA(), *b = new PrototypeB();
  26. Prototype *copya = a->clone();
  27. Prototype *copyb = b->clone();
  28. }