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