09 大话设计模式C++实现之原型模式9.3

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;
}