版权声明:本文为博主原创文章,如若转载请注明本人原始地址。 https://blog.csdn.net/Andy_93/article/details/78008299
意图
用原型实例指定穿件对象的种类,并通过拷贝这些原型创建新对象
参与者
1 抽象原型(Prototype) : 声明一个克隆自身的接口2 具体原型(ConcretePrototype):实现一个克隆自身的操作
3 客户(Client): 让一个原型克隆自身从而穿件一个新的对象
适用性
当一个系统应该独立于它的产品创建、构成和表示时,要使用原型模式当要实例化的类实在运动时刻指定时,比如动态装载
为了避免创建一个与产品层次平行的工厂类层次时
当一个类的实例只能有几个不同状态组合中的一种时
实例
class CComputer
{
public:
virtual CComputer* clone() = 0;
virtual void displayInfo() = 0;
};
class CASUSComputer : public CComputer
{
public:
CASUSComputer()
{
m_strCPU = "ASUS CPU";
m_strHost = "ASUS Host";
m_Monitor = "ASUS Monitor";
}
CASUSComputer(const CASUSComputer &item)
{
this->m_strCPU = item.m_strCPU;
this->m_strHost = item.m_strHost;
this->m_Monitor = item.m_Monitor;
}
CComputer* clone()
{
return new CASUSComputer(*this);
}
void displayInfo()
{
cout << m_strCPU.c_str() << endl;
cout << m_strHost.c_str() << endl;
cout << m_Monitor.c_str() << endl;
}
private:
string m_strCPU;
string m_strHost;
string m_Monitor;
};
int main(int argc, char* argv[])
{
cout << "strat!!"<<endl;
system("pause");
CComputer* pCom = new CASUSComputer();
cout << "cerate a CASUSComputer onject!!" << endl;
system("pause");
CComputer* pComCopy = pCom->clone();
pComCopy->displayInfo();
system("pause");
return 0;
}