Prototype模式(原型模式)的基本原理是我们想利用已有的对象,复制大量同类的对象。在C++中,利用拷贝构造函数是实现复制对象的最好方法。
Prototype模式的实现方法是在基类中定义一个Clone的虚函数,然后在派生类中改写该虚函数,并在派生类的Clone函数中调用该类的拷贝构造函数,每调用一次,就生成了一个拷贝的对象。
实例代码:
//基类
class CShape
{
public:
CShape(void);
virtual ~CShape();
virtual CShape* Clone()=0;
};
//派生类Ccircle头文件 Circle.h
class CCircle:public CShape
{
public:
CCircle(void);
~CCircle(void);
CCircle(const CCircle& crl);
virtual CShape* Clone();
};
//派生类Ccircle源文件 Circle.cpp
CCircle::CCircle(void)
{
}
CCircle::~CCircle(void)
{
}
//拷贝构造函数
CCircle::CCircle(const CCircle& crl)
{
}
CShape* CCircle::Clone()
{
//调用拷贝构造函数
return new CCircle(*this);
}
//派生类CRectangle头文件 Rectangle.h
class CRectangle:public CShape
{
public:
CRectangle (void);
~CRectangle (void);
CRectangle (const CRectangle& crl);
virtual CShape* Clone();
};
//派生类CRectangle源文件 Rectangle.cpp
CRectangle:: CRectangle (void)
{
}
CRectangle::~ CRectangle (void)
{
}
//拷贝构造函数
CRectangle:: CRectangle (const CRectangle& crl)
{
}
CShape* CRectangle::Clone()
{
//调用拷贝构造函数
return new CRectangle (*this);
}
//客户端使用
void main()
{
Cshape *pShape=new Ccircle;
Cshape *pShape1=pShape->Clone();
pShape=new CRectangle;
Cshape *pShape2=pShape->Clone();
}