【c++设计模式】原型模式

创建型模式

5)原型模式

这种模式主要是用于获取当前实例的拷贝。
假如当前基类有很多派生类,而我们只有基类指针而无法确定指向对象时,是无法直接执行拷贝动作的。因为拷贝时需要显式调用该派生类的拷贝构造函数,也就必须要确定派生类的类型。
为了解决这个问题,在基类中添加clone方法,通过return new (*this)返回当前对象。

class Juice{
public:
    virtual void show() = 0;
    virtual Juice* clone() = 0;
};

class AppleJuice : public Juice{
public:
    void show(){
        cout<< "this is applejuice"<<endl;
    }
    Juice* clone(){
        return new AppleJuice(*this);
    }
};
class OrangeJuice: public Juice{
public:
    
    void show(){
        cout<<"this is orangejuice"<<endl;
    }
    Juice* clone(){
        return new OrangeJuice(*this);
    }
};

int main(){
    
    Juice* p1 = new OrangeJuice();
    
    /*
     传了很久很久 以至于忘了p1是什么
     */
    
    //Juice* p2 = p1->clone();
    p1->show();
}
posted @ 2019-12-07 15:09  corineru  阅读(170)  评论(0编辑  收藏  举报