設(shè)計模式-行為模式-備忘錄模式

備忘錄模式要求不破壞封裝的前提下將對象內(nèi)的狀態(tài)保存到對象外,并且可以用這個狀態(tài)恢復對象。典型應用是游戲的存檔機制。

以下代碼定義了游戲的存檔,假設(shè)我們關(guān)心的對象狀態(tài)可以用一個整型數(shù)表示。

#include <iostream>

using namespace std;

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

以下代碼定義了游戲類,也就是這個模式所關(guān)心的對象,它可以用當前狀態(tài)創(chuàng)建存檔,也能應用存檔覆蓋當前游戲狀態(tài)。

class Game
{
private:
    int state;
public:
    Game():state(0){}
    void LoadGameSlot(Slot* slot)
    {
        state = slot->GetState();
        cout<<__FUNCTION__<<":\tstate="<<state<<endl;
    }
    Slot* CreateSlot()
    {
        return new Slot(state);
    }
    void Play()
    {
        cout<<__FUNCTION__<<":\tstate="<<state<<endl;
    }
};

以下代碼定義了一個存檔管理器,它負責管理存檔。為了簡單,這里只支持一份存檔。

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="<<m->GetState()<<endl;
    }
    Slot* Load()
    {
        cout<<__FUNCTION__<<":\tstate="<<m_pSlot->GetState()<<endl;
        return m_pSlot;
    }
};

以下代碼模擬了一個玩游戲的過程。
首先創(chuàng)建存檔管理器和游戲,然后創(chuàng)建了兩個存檔(512和1024)。
先未加載存檔進行游戲,然后加載1024存檔游戲,并進行游戲,然后保存游戲創(chuàng)建的存檔。
接下來加載512存檔進行游戲。
最后加載存檔管理器中的存檔進行游戲。

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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容