4.有的时候,创建对象时,构造函数的参数很多,而自己又不完全的知道每个参数的意义,就可以使用原型模式来创建一个新的对象,不必去理会创建的过程,让创建过程见鬼去吧。
所以,在上述的的情况下,在设计的时候,适当的考虑一下原型模式,减少对应的工作量,减少程序的复杂度,提高效率。
用UML类图表示原型模式
由于克隆需要一个原型,而上面的类图中Prototype就这个原型,Prototype定义了克隆自身的Clone接口,由派生类进行实现,而实现原型模式的重点就在于这个Clone接口的实现。ConcretePrototype1类和ConcretePrototype2类继承自Prototype类,并实现Clone接口,实现克隆自身的操作;同时,在ConcretePrototype1类和ConcretePrototype2类中需要重写默认的复制构造函数,供Clone函数调用,Clone就是通过在内部调用重写的复制构造函数实现的。在后续的编码过程中,如果某个类需要实现Clone功能,就只需要继承Prototype类,然后重写自己的默认复制构造函数就好了。好比在C#中就提供了ICloneable接口,当某个类需要实现原型模式时,只需要实现这个接口的道理是一样的。
代码实现
复制代码
/*
** FileName : PrototypePatternDemo
** Author : Jelly Young
** Date : 2013/11/25
** Description : More information, please go to http://www.easck.com/> */
#include <iostream>
using namespace std;
//接口
class Prototype
{
public :
Prototype(){}
virtual ~Prototype(){}
virtual Prototype * Clone() = 0;
};
//实现
class ConcretePrototype : public Prototype
{
public :
ConcretePrototype():m_counter(0){}
virtual ~ConcretePrototype(){}
//拷贝构造函数
ConcretePrototype( const ConcretePrototype & rhs)
{
m_counter = rhs .m_counter;
}
//复制自身











