设计模式--创建型模式--原型模式

//Creational Patterns--Prototype Pattern
//创建型模式--原型模式

//Prototype(抽象原型):定义了克隆自身的接口。
//ConcretePrototype(具体原型):被复制的对象,需要实现 Prototype 定义的接口

class Monkey
{
public:
    Monkey(){}
    virtual ~Monkey(){}
    virtual Monkey* Clone() = 0;
    virtual void Play() = 0;
};

class SunWuKong : public Monkey
{
public:
    SunWuKong(string name){m_strName = name;}
    ~SunWuKong(){}

    SunWuKong(const SunWuKong &swk)//拷贝构造函数
    {
        if(this == &swk)return;
        
        m_strName = swk.m_strName;
    }
    Monkey* Clone()
    {
        return new SunWuKong(*this);    //关键代码
    }
    void Play(){cout << m_strName << " play Golden-hoop-stick" << endl;}
private:
    string m_strName;
};

//---------------------------------------------------------
//测试
void dpPrototypeTestMain()
{
    Monkey *swp = new SunWuKong("Qi Tian Da Sheng");

    Monkey *swp1 = swp->Clone();
    Monkey *swp2 = swp1->Clone();

    swp->Play();
    swp1->Play();
    swp2->Play();

    if(swp) {delete swp; swp = NULL;}
    if(swp1) {delete swp1; swp1 = NULL;}
    if(swp2) {delete swp2; swp2 = NULL;}
    return;
};
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值