【创建型】Prototype模式

    原型模式主要是用原型实例指定创建原型对象的种类,并且通过拷贝原型创建新对象。最简单的理解就是克隆。就如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++这样的语言中,必需要要注意对象间的深、浅拷贝问题,一不小心就可能出现问题。

posted @ 2016-05-18 20:33  Jacc.Kim  阅读(139)  评论(0编辑  收藏  举报