设计模式-行为模式-备忘录模式

备忘录模式要求不破坏封装的前提下将对象内的状态保存到对象外,并且可以用这个状态恢复对象。典型应用是游戏的存档机制。

以下代码定义了游戏的存档,假设我们关心的对象状态可以用一个整型数表示。

#include 

using namespace std;

class Slot
{
private:
    int m_state;
public:
    Slot(int state):m_state(state){}
    int GetState()
    {
        return m_state;
    }
};

以下代码定义了游戏类,也就是这个模式所关心的对象,它可以用当前状态创建存档,也能应用存档覆盖当前游戏状态。

class Game
{
private:
    int state;
public:
    Game():state(0){}
    void LoadGameSlot(Slot* slot)
    {
        state = slot->GetState();
        cout<<__FUNCTION__<<":\tstate="<class GameSlotManager
{
private:
    Slot* m_pSlot;
public:
    GameSlotManager():m_pSlot(nullptr){}
    void Save(Slot* m)
    {
        if (m_pSlot)
        {
            delete m_pSlot;
            m_pSlot = nullptr;
        }
        m_pSlot = m;
        cout<<__FUNCTION__<<":\tstate="<GetState()<int main(void){

    GameSlotManager gameSlotManager;
    Game game;
    Slot slot512(512);
    Slot slot1024(1024);
    game.Play();
    game.LoadGameSlot(&slot1024);
    game.Play();
    gameSlotManager.Save(game.CreateSlot());
    game.LoadGameSlot(&slot512);
    game.Play();
    game.LoadGameSlot(gameSlotManager.Load());
    game.Play();
    return 0;
}

输出

Play:   state=0
LoadGameSlot:   state=1024
Play:   state=1024
Save:   state=1024
LoadGameSlot:   state=512
Play:   state=512
Load:   state=1024
LoadGameSlot:   state=1024
Play:   state=1024

你可能感兴趣的:(设计模式-行为模式-备忘录模式)