09 大话设计模式C++实现之原型模式9.3
#include<iostream>
#include<string>
using namespace std;
/*
原型模式:
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象,原型模式实际上就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节
一般在初始化信息不发生变化的情况下,克隆是最好的办法。这样既隐藏了对象创建的细节,又对性能是大大的提高。不用重新初始化对象,而是动态的获得对象运行时的状态
其中利用java的memberwiseClone()方法,如果字段是值类型的,则对字段执行逐位复制,如果字段是引用类型,则复制引用但不复制引用的对象,因此,
原始对象及其副本引用同一对象
*/
//抽象的原型类
class Prototype
{
public:
//在抽象类中定义拷贝对象的接口
virtual Prototype* Clone() = 0;
virtual void Display() = 0;
};
//子类访问父类成员,父类成员必须是protected或者public的
class ConcretePrototype1 : public Prototype
{
private:
string id;
public:
ConcretePrototype1()
{
this->id = "";
}
ConcretePrototype1(string id)
{
this->id = id;
}
//提供具体的构造方法
virtual Prototype* Clone()
{
ConcretePrototype1 *p = new ConcretePrototype1();
*p = *this;
return p;
}
virtual void Display()
{
cout << "Id: " << this->id << endl;
}
string DisplayId()
{
return this->id;
}
};
void Client()
{
ConcretePrototype1 *p1 = new ConcretePrototype1("wuyu");
Prototype *c1 = p1->Clone();
c1->Display();
}
int main()
{
Client();
system("pause");
return EXIT_SUCCESS;
}