[设计模式]原型模式(Prototype)

来源:互联网 发布:java多线程 lock 编辑:程序博客网 时间:2024/05/16 17:07

1.  意图

       用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

2. 结构与参与者


3. 代码示例

#include<iostream>#include <vector>#include <string>using namespace std;class Prototype //抽象基类 { private:string m_strName;public: Prototype(string strName):m_strName(strName){}Prototype() { m_strName = " "; }void Set_name(string strName){m_strName=strName;}void Show() {cout<<m_strName<<endl;}virtual Prototype* Clone() = 0 ; } ; // class ConcretePrototype1 class ConcretePrototype1 : public Prototype { public: ConcretePrototype1(string strName) : Prototype(strName){}ConcretePrototype1(){}virtual Prototype* Clone() { ConcretePrototype1 *p = new ConcretePrototype1() ; *p = *this ; //深复制对象 return p ; } } ; // class ConcretePrototype2 class ConcretePrototype2 : public Prototype { public: ConcretePrototype2(string strName) : Prototype(strName){}ConcretePrototype2(){}virtual Prototype* Clone() { ConcretePrototype2 *p = new ConcretePrototype2() ; *p = *this ; //深复制对象 return p ; } } ; //客户端int main(){string str="xiaowang";ConcretePrototype1* test = new ConcretePrototype1("小王");ConcretePrototype1* test2 = (ConcretePrototype1*)test->Clone();ConcretePrototype2* test3 = (ConcretePrototype2*)test2->Clone();test2->Set_name(str);test->Show();test2->Show();test3->Show();return 0;}