美文网首页C++设计模式程序员
【C++设计模式】装饰器模式

【C++设计模式】装饰器模式

作者: 小鱼号的代码日记 | 来源:发表于2021-02-07 22:48 被阅读0次
/*设计模式
 *  装饰器模式
 * 又叫包装模式
 * 通过一种对客户端透明的方式
 * 来扩展对象功能,
 * 是继承关系的一种替代
 * 动态地给一个类增加功能
*/

#include<iostream>
using namespace std;

class AbstractPlayer
{
public:
    virtual void ShowStatus() = 0;
public:
    int m_Hp;
    int m_Mp;
};

class  PlayerA:public AbstractPlayer
{
public:
    ///玩家初始状态
    PlayerA()
    {
        m_Hp = 0;
        m_Mp = 0;
    }
    virtual void ShowStatus()
    {
        cout << "hp" << m_Hp << endl;
        cout << "mp" << m_Mp << endl;
    }
};

//玩家增加了某种装备(装饰)
///抽象装备(装饰)
class AbstractEquipment :public AbstractPlayer
{
public:
    AbstractEquipment(AbstractPlayer* pPlayer)
    {
        m_player = pPlayer;
    }
    //不实现
    virtual void ShowStatus()
    {

    }
public:
    AbstractPlayer* m_player;
};

class AK47Equipment : public AbstractEquipment
{
public:
    AK47Equipment(AbstractPlayer* pPlayer) : AbstractEquipment(pPlayer)
    {

    }
    void addAk47Equiepment()
    {
        //添加AK47的加成
        m_Hp = m_player->m_Hp + 30;
        m_Mp = m_player->m_Mp + 30;
        delete m_player;
    }
    virtual void ShowStatus()
    {
        addAk47Equiepment();
        cout << "hp" << m_Hp << endl;
        cout << "mp" << m_Mp << endl;
    }
};

void testDecorator()
{
    AbstractPlayer* player = new PlayerA();
    cout << "player init" << endl;
    player->ShowStatus();
    cout << "-------------"<<endl;
    cout << "player add ak47"<<endl;
    cout << "-------------"<<endl;
    player = new AK47Equipment(player);
    player->ShowStatus();
}

相关文章

网友评论

    本文标题:【C++设计模式】装饰器模式

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