Prototype:原型模式

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值