设计模式-原型模式

1. 首先分析原型模式的由来

    一般来说,创建一个对象可以由以下方法:

            知道对象的具体类型,直接用new生成。

            不知道型号,知道相应的需求,可以使用工厂方法模式。

           根据一个已有的对象来复制为一个新的对象,可以使用原型模式。

 

2. 原型模式可以简单理解为拷贝原型对象得到新的对象。想象一个配钥匙的小店,给店主一个原有的钥匙,复制一份新的。在原型模式中,得到的新的对象可以进行修改再返回给用户。

 

3. UML图

 

 

4. 示例实现代码

#include <iostream>
using namespace std;

//原型类,声明一个Clone的接口
class Protetype
{
public:
	Protetype(){}
	virtual ~Protetype(){}
	virtual Protetype* Clone()=0;	//声明接口
};

//具体的原型类-1
class ConcreteProtetype1:public Protetype
{
public:
	ConcreteProtetype1(){cout<<"Constructed a protetype1!"<<endl;}
	virtual ~ConcreteProtetype1(){cout<<"Deleted a protetype1!"<<endl;}
	Protetype* Clone()
	{
		return new ConcreteProtetype1(*this);	//拷贝一份对象返回,调用了拷贝构造函数
	}
};

//具体的原型类-2
class ConcreteProtetype2:public Protetype
{
public:
	ConcreteProtetype2(){cout<<"Constructed a protetype2!"<<endl;}
	virtual ~ConcreteProtetype2(){cout<<"Deleted a protetype2!"<<endl;}
	Protetype* Clone()
	{
		return new ConcreteProtetype2(*this);	//拷贝一份对象返回
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	Protetype* p1=new ConcreteProtetype1;
	Protetype* p2=p1->Clone();

	delete p1;
	delete p2;

	Protetype* p3=new ConcreteProtetype1;
	ConcreteProtetype2* p4=(ConcreteProtetype2*)p3->Clone();

	delete p3;
	delete p4;

	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章