创建型模式
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(); }