美文网首页
原型模式 C++实现

原型模式 C++实现

作者: 假程序员 | 来源:发表于2019-03-13 23:43 被阅读0次
    //
    //  main.cpp
    //  prototype_pattern
    //
    //  Created by apple on 2019/3/13.
    //  Copyright © 2019年 apple. All rights reserved.
    //
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    class IPrototype
    {
    public:
        virtual IPrototype *clone() = 0;
        virtual void test() = 0;
        virtual ~IPrototype() {}
    };
    class Prototype_A:public IPrototype
    {
    private:
        string name;
    public:
        Prototype_A() {this->name = "";}
        Prototype_A(string name) {this->name = name;}
        IPrototype *clone()
        {
            Prototype_A *temp = new Prototype_A();
            *temp = *this;
            return temp;//此为原型模式的核心,想想为何要这么做!
            //首先new一个Prototype_A类型的实例,*this赋值给*temp
            //这样就会使这两个对象中各个属性以及方法的值相等
        }
        void test() {cout<<"Prototype_A:"<<this->name<<endl;}
    };
    class Prototype_B:public IPrototype
    {
    private:
        string name;
    public:
        Prototype_B() {this->name = "";}
        Prototype_B(string name) {this->name = name;}
        IPrototype *clone()
        {
            Prototype_B *temp = new Prototype_B();
            *temp = *this;
            return temp;
        }
        void test() {cout<<"Prototype_B:"<<this->name<<endl;}
    };
    int main(int argc, const char * argv[]) {
        Prototype_A *tempA_a = new Prototype_A("A");
        tempA_a->test();
        
        Prototype_A *tempA_b = (Prototype_A *)tempA_a->clone();
        tempA_b->test();
        
        Prototype_B *tempB_a = new Prototype_B("B");
        tempB_a->test();
        
        Prototype_A *tempB_b = (Prototype_A *)tempB_a->clone();
        tempB_b->test();
        
        delete tempA_a;
        delete tempA_b;
        delete tempB_a;
        delete tempB_b;
        return 0;
    }
    
    Prototype_A:A
    Prototype_A:A
    Prototype_B:B
    Prototype_B:B
    Program ended with exit code: 0
    

    相关文章

      网友评论

          本文标题:原型模式 C++实现

          本文链接:https://www.haomeiwen.com/subject/jmffmqtx.html