UML类图(仅供参考)如下:
原型模式解决的问题:
用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。实际上就是由于各种原因,你只是想克隆一个对象(深拷贝或浅拷贝),而不是想调用构造函数创建新对象,也不想关心对象的初始化等等
源码
#include <iostream>
#include <string>
// 抽象原型
class CPrototype
{
public:
CPrototype(std::string &sName) :_sName(sName) {}
virtual ~CPrototype() {}
// 克隆this对象接口
virtual CPrototype *Clone() const = 0;
void Show()
{
std::cout << _sName << std::endl;
}
protected:
CPrototype() {}
std::string _sName;
};
// 具体原型
class Cprototype1 :public CPrototype
{
public:
Cprototype1(std::string &sName) :CPrototype(sName) {}
virtual CPrototype *Clone() const
{
Cprototype1 *p = new Cprototype1();
*p = *this;
return (CPrototype *)p;
}
private:
Cprototype1() {}
// 注意,这里一定要是深拷贝
Cprototype1& operator=(const Cprototype1 &prototype1)
{
this->_sName = prototype1._sName;
return *this;
}
};
// 测试
int main()
{
std::string sName = "颜海";
CPrototype *pInstance1 = new Cprototype1(sName);
CPrototype *pInstance2 = pInstance1->Clone();
pInstance1->Show();
pInstance2->Show();
}
好处
不用调用构造函数,不用初始化就可以得到一个可使用的对象