C++设计模式程序员

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

2021-02-07  本文已影响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();
}
上一篇 下一篇

猜你喜欢

热点阅读