原型模式简单说就是自我复制,实现层面就是实现一个Clone函数,也可以认为是拷贝构造函数的指针版本。
以下代码定义了原型模式的抽象类,核心就是Clone函数。
#include <iostream>
using namespace std;
class ProtoType
{
public:
virtual ProtoType* Clone()=0;
virtual ~ProtoType(){}
};
以下代码定义了原型模式的实现类,由于属性简单,这里可以用默认的拷贝构造函数。
class ConcreteProtoType:public ProtoType
{
public:
int attribute;
ConcreteProtoType(int value):attribute(value){}
ProtoType* Clone()
{
return new ConcreteProtoType(*this);
}
void Display(void)
{
cout<<"attribute="<<attribute<<endl;
}
};
以下是对原型模式的演示,分别打印了原型和克隆体的属性。
int main()
{
ProtoType* P = new ConcreteProtoType(123);
ProtoType* PClone = P->Clone();
dynamic_cast<ConcreteProtoType*>(P)->Display();
dynamic_cast<ConcreteProtoType*>(PClone)->Display();
delete P;
delete PClone;
return 0;
}
输出
attribute=123
attribute=123
网友评论