设计模式之备忘录模式

//C++设计模式之备忘录模式
/*备忘录模式,在不破坏封装的前提下,捕获一个内部状态,在该对象之外保存这个
状态,*/

#include<iostream>

using namespace std;

class State
{
    int vit;
    int atk;
    int def;
public:
    State(int v, int a, int d) :vit(v), atk(a), def(d) {};
    int getvit() { return vit; }
    int getatk() { return atk; }
    int getdef() { return def; }
};
class StateManger
{
    State* m_state;
public:
    void setstate(State* sta)
    {
        m_state = sta;
    }
    State* getstate()
    {
        return m_state;
    }
};

class GameRole
{
    int vit;
    int atk;
    int def;
public:
    void stateDisplay()
    {
        cout << "当前角色状态:" << endl;
        cout << "体力:" << vit << endl;
        cout << "攻击力:" << atk << endl;
        cout << "防御力:" << def << endl;
    }
    void Initstate()
    {
        vit = 100;
        atk = 100;
        def = 100;
    }
    State* savestate()
    {
        return (new State(vit, atk, def));
    }
    void recoverystate(State* memnto)
    {
        vit = memnto->getvit();
        atk = memnto->getatk();
        def = memnto->getdef();
    }
    void fight()
    {
        vit = 0;
        atk = 0;
        def = 0;
    }
};

int main()
{
    GameRole* xiaoyuan = new GameRole();
    xiaoyuan->Initstate();
    xiaoyuan->stateDisplay();

    StateManger* Manger = new StateManger();
    Manger->setstate(xiaoyuan->savestate());

    cout << endl;
    xiaoyuan->fight();
    xiaoyuan->stateDisplay();

    cout << endl;
    xiaoyuan->recoverystate(Manger->getstate());
    xiaoyuan->stateDisplay();

    system("pause");
    return 0;
}

使用该种设计模式的关键在于对象之外存储状态,获得当前对象的内部数据,然后可以调用对象之外的状态的恢复函数,然后就没有其他的了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值