c++之原型模式

原型模式

定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

它属于创建者模式,其实就是通过一个对象再创建另外一个对象的副本,但是不需要知道任何创建对象所需要的细节。

优点:

1、当一个对象经过一段时间后,它内部的状态已经发生了变化,这时候,程序的其他业务需要当前状态下 的对象去进行其他的操作。这时候如果直接在new一个新的对象出来,它的状态就对应不上了。这时候采用原型模式,就可以获取一个状态一致的对象。

2、有时候创建对象时,构造函数需要的参数却很多,但是我们又不完全的知道每个参数的具体含义,就可以使用原型模式来创建一个新的对象,从而不必去理会创建的过程。

3、恰当的使用原型模式,可以减少代码量,提高程序的效率。

代码:

#include 

using namespace std;

//原型
class Prototype
{
public:
	Prototype(int n) :m_num(0)
	{
		m_num = n;
	}
	int getNum()
	{
		return m_num;
	}
	virtual Prototype* clone() = 0;

private:
	int m_num;
};

//具体原型实例A
class PrototypeA :public Prototype
{
public:
	PrototypeA(int num) :Prototype(num)
	{
	}
	Prototype* clone()
	{
		return new PrototypeA(*this);
	}
};

//具体原型实例B
class PrototypeB :public Prototype
{
public:
	PrototypeB(int num) :Prototype(num)
	{
	}
	Prototype* clone()
	{
		return new PrototypeB(*this);
	}
};

//客户端
int main()
{
	PrototypeA *proA = new PrototypeA(10);
	cout << "proA-num=" << proA->getNum() << " 对象&=" << proA << endl;

	PrototypeA *newproA = static_cast(proA->clone());
	cout << "newproA-num=" << newproA->getNum() <<" 对象&="<< newproA << endl;

	PrototypeB *newproB = static_cast(proA->clone());
	cout << "newproB-num=" << newproB->getNum() << " 对象&=" << newproB << endl;
	
	if (proA)
	{
		delete proA;
		proA = nullptr;
	}
	if (newproA)
	{
		delete newproA;
		newproA = nullptr;
	}
	if (newproB)
	{
		delete newproB;
		newproB = nullptr;
	}

	return 0;
}

 

你可能感兴趣的:(设计模式)