备忘录模式

// ConsoleApplication19.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

//C++后面使用的类要先声明?

/*负责存储GameRole对象的内部状态,并可防止GameRole以外的其他对象访问备忘录Memento。
备忘录有两个接口,Caretaker只能看见备忘录的窄借口,他只能将备忘录传递给其他对象。
Originator能够看到一个宽接口,允许他访问返回到先前状态所需的所有数据*/

class Memento
{
public:
    int m_atk;
    int m_magic;
    int m_bld;

    Memento(int a,int m,int b)
    {
        this->m_atk = a;
        this->m_magic = m;
        this->m_bld = b;
    }
};

/*负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,
并可使用备忘录恢复内部状态。GameRole可根据需要决定Memento
    存储GameRole的哪些内部状态*/
class GameRole
{
public:
    int atk;
    int magicNum;
    int bldNum;

    GameRole(int a,int m,int b)
    {
        this->atk = a;
        this->bldNum = b;
        this->magicNum = m;
    }
    void RecoveryDataFrom(Memento* m)
    {
        atk = m->m_atk;
        magicNum = m->m_magic;
        bldNum = m->m_bld;
    }

    Memento* SetMementoData()
    {
        return new Memento(atk,magicNum,bldNum);
    }

    void Show()
    {
        cout<<atk<<magicNum<<bldNum<<endl;
    }
};


/*负责保存好备忘录Memento,不能对备忘录的内容进行操作或检查*/
class Caretaker
{
public:
    Memento *m;
};
int _tmain(int argc, _TCHAR* argv[])
{
    GameRole *gr = new GameRole(100,100,100);
    gr->Show();

    Caretaker *m = new Caretaker();
    m->m = gr->SetMementoData();

    gr->atk =80;
    gr->Show();


    gr->RecoveryDataFrom(m->m);
    gr->Show();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值