Prototype:原型模式
所谓原型模式,就是可以根据一个原型,快速创建出其拷贝。
如:
int a = 1;
int* b = new int(a);
a++;
cout << a << endl;
cout << *b << endl;
输出结果:
2
1
上面就使用了原型模式。根据原型a,快速创建出了a的拷贝b。同时,b保存了a当时的状态。当a之后进行了修改,根据b,就可以得知当时a的状态。
原型模式的特点就是:①必须有一个原型对象②对象可以自我复制。
其主要作用如下:
1. 需要创建的对象并非一开始就可以确定,而是需要在运行时确定。那么,使用原型模式,只要令原型对象自我复制一份即可
2. 需要保存某个原型对象在某种状态下的副本。如一个原型对象创建后,进行了许多变化,其内部的参数已经经过了许多调整。此时希望保存当前状态的副本,那么令原型对象自我复制一份即可
3. 当处理多个对象时,每个对象可能有许多状态,但这些对象间的差异非常小。那么可以令原型对象自我复制多份,然后作少量调整即可
4. 有时候,创建类对象需要许多参数。若此时有一个正在运行的原型,那么,直接令该原型自我复制一份,省去了创建过程。
以下示例代码省略了构造函数与析构函数:
1. 原型
原型必须有一个复制自身的函数Clone()。
对于C++而言,这一点的实现借助于拷贝构造函数。其他语言平台依赖于自身特性。
class Prototype
{
public:
virtual Prototype * Clone() = 0;
};
class ConcretePrototype : public Prototype
{
public:
//拷贝构造函数
ConcretePrototype(const ConcretePrototype & rhs)
{
_counter = rhs._counter;
}
//复制自身
virtual ConcretePrototype * Clone()
{
//调用拷贝构造函数
return new ConcretePrototype(*this);
}
private:
int _counter;
};
2. 用户调用
void main()
{
//生成对像
ConcretePrototype * conProA = new ConcretePrototype();
//复制自身
Prototype * conProB = conProA->Clone();
//其他操作
delete conProA;
delete conProB;
}