原型模式主要是用原型实例指定创建原型对象的种类,并且通过拷贝原型创建新对象。最简单的理解就是克隆。就如cocos2d-x中的 class Clonable::clone();该模式的主要目的是可以在运行时,随时创建出某个对象的副本,并且副本具有与本体一样的状态信息。类图参考如下:
模式的编码结构参考如下:
1 namespace propotype 2 { 3 /************************************************************************** 4 * create : (jacc.kim) [5-18-2016] 5 * summary : 6 **************************************************************************/ 7 class IClonable 8 { 9 public: 10 virtual IClonable* clone() = 0; 11 };//class IClonable 12 13 class ConcreteClass : public IClonable 14 { 15 public: 16 // some code here........ 17 virtual IClonable* clone() override; 18 19 private: 20 // some member data here........ 21 int m_nTheIntData; // this is a test member data. 22 };//class ConcreteClass 23 24 }//namespace propotype
模式编码结构参考
该模式的优点非常明显,可以在任何需要的时候,轻松轻松地克隆出一份当前目标的副本出来,并且最最重要的是现场状态会保持。另外,对于Client来说,同样是解除了与具体对象子类的直接依赖关系。
有优点,同样也有缺点。它的缺点也是很明显的,即为了同步现场状态,有时候clone()行为会比较复杂,实现比较繁琐。尤其在如c++这样的语言中,必需要要注意对象间的深、浅拷贝问题,一不小心就可能出现问题。
时间: 2024-10-22 05:39:24