`

备忘录模式(Memento)

 
阅读更多
备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.

备忘录模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态.

#include <iostream>
#include <map>
using namespace std;

class Player
{
public:
    int mHp;
    int mMp;
    int mAp;
};

class Game
{
public:
    Game()
    {
        mCurrentPlayer.mAp = 10;
        mCurrentPlayer.mHp = 10;
        mCurrentPlayer.mMp = 10;
        mNum = 1;
    }

    ~Game(){}

    void showStatus()
    {
        cout << "当前角色,hp:" << mCurrentPlayer.mHp << ",mp:" << mCurrentPlayer.mMp
             << ",ap:" << mCurrentPlayer.mAp << endl;
    }

    void killNPC1()
    {
        mCurrentPlayer.mAp += 10;
        mCurrentPlayer.mHp += 10;
        mCurrentPlayer.mMp += 10;
        cout << "消灭1号怪物" << endl;
    }

    void killBoss1()
    {
        if(mCurrentPlayer.mHp<30)
        {
            cout << "实力不足,被boss1消灭" << endl;
            mCurrentPlayer.mHp = 10;
            return;
        }
        cout << "消灭boss1" << endl;
    }

    void killBoss2()
    {
        if(mCurrentPlayer.mHp<300)
        {
            cout << "实力不足,被boss2消灭" << endl;
            mCurrentPlayer.mHp = 10;
            return;
        }
        cout << "消灭boss2" << endl;
    }

    //创建存档
    void createMemento(int num)
    {
        mNum = num;
        mPlayerMap.insert(make_pair<int,Player>(mNum,mCurrentPlayer));
        cout << "将当前环境存档,编号:" << num << endl;
    }

    //档读存储
    void loadMemento(const map<int,Player>& playerMap)
    {
        mPlayerMap.clear();
        for(map<int,Player>::const_iterator iter = playerMap.begin();
                                            iter!=playerMap.end();++iter)
        {
            mPlayerMap.insert(make_pair<int,Player>((*iter).first,(*iter).second));
        }
        cout << "导入一个强力的存档" << endl;
    }

    //读取存档
    void restoreMemento(int num)
    {
        for(map<int,Player>::const_iterator iter = mPlayerMap.begin();
                                            iter!=mPlayerMap.end();++iter)
        {
            if((*iter).first==num)
            {
                mCurrentPlayer.mAp = (*iter).second.mAp;
                mCurrentPlayer.mHp = (*iter).second.mHp;
                mCurrentPlayer.mMp = (*iter).second.mMp;
                cout << "读取存档:" << num << endl;
            }
        }
    }

private:
    Player mCurrentPlayer;

    map<int,Player> mPlayerMap;

    int mNum;
};

int main()
{
    Game* game = new Game;
    game->killNPC1();
    game->createMemento(1);
    game->killBoss1();
    game->restoreMemento(1);
    game->showStatus();
    game->killNPC1();
    game->restoreMemento(2);
    game->killBoss1();
    game->killBoss2();
    map<int,Player> m;
    Player seniorPlayer;
    seniorPlayer.mAp = 1000;
    seniorPlayer.mHp = 1000;
    seniorPlayer.mMp = 1000;
    m.insert(make_pair<int,Player>(1000,seniorPlayer));
    game->loadMemento(m);
    game->restoreMemento(1000);
    game->killBoss2();
}

消灭1号怪物
将当前环境存档,编号:1
实力不足,被boss1消灭
读取存档:1
当前角色,hp:20,mp:20,ap:20
消灭1号怪物
消灭boss1
实力不足,被boss2消灭
导入一个强力的存档
读取存档:1000
消灭boss2
分享到:
评论

相关推荐

    备忘录模式(Memento Pattern) 1. 什么是备忘录模式? 2. 为什么需要备忘录模式? 3. 备忘录模式的核心概念 4. 备忘录模式的结构 5. 备忘录模式的基本实现 5.1 简单的文本

    备忘录模式(Memento Pattern) 1. 什么是备忘录模式? 2. 为什么需要备忘录模式? 3. 备忘录模式的核心概念 4. 备忘录模式的结构 5. 备忘录模式的基本实现 5.1 简单的文本编辑器示例 6. 备忘录模式的进阶实现 6.1 ...

    设计模式之备忘录模式(Memento Pattern)

    备忘录模式(Memento Pattern)是软件设计模式中的一种行为模式,它的主要目的是在不破坏对象封装性的前提下,允许对象在特定时刻保存其内部状态,并能够在之后恢复到保存时的状态。这种模式广泛应用于撤销/重做功能...

    设计模式之备忘录(memento)

    备忘录模式主要涉及三个角色: 1. **发起人(Originator)**:需要保存其内部状态的对象。它创建并存储备忘录,也可以从备忘录恢复状态。 2. **备忘录(Memento)**:存储发起人的内部状态。备忘录是发起人的私有...

    设计模式之备忘录模式(Memento)

    备忘录模式(Memento Pattern)是设计模式中的一种行为模式,主要目的是在不违反封装原则的情况下,保存一个对象的内部状态,以便在需要时能够恢复到先前的状态。这种模式通常用于实现撤销/重做功能或者在游戏中保存...

    备忘录模式.rar备忘录模式.rarjava设计模式

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要记录用户操作历史或者游戏进度...

    C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式

    备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到先前的状态。这种模式在需要撤销/重做功能、...

    设计模式_备忘录模式.zip

    备忘录模式是一种在软件工程中广泛使用的结构型设计模式,其主要目的是为了在不破坏封装性的前提下,能够安全地保存对象的状态,并在需要时恢复到先前保存的状态。这种模式通常用于那些需要记录和回滚操作的重要场景...

    C#备忘录模式 代码例子

    备忘录模式是一种设计模式,它在不破坏封装性的前提下,保存对象的内部状态,以便在需要的时候恢复。在C#中,备忘录模式常用于实现撤销/重做功能,或者在需要记录和恢复对象状态的情况下。下面将详细解释备忘录模式...

    java设计模式-备忘录模式源代码

    在Java中,备忘录模式通常包括三个关键角色:原始对象(Originator)、备忘录(Memento)和管理者(Caretaker)。原始对象是需要保存状态的对象,它创建并存储在备忘录中的状态。备忘录负责存储原始对象的状态,而...

    备忘录模式代码示例

    备忘录模式的核心组件包括发起人(Originator)角色、备忘录(Memento)角色和照料者(Caretaker)角色。 发起人是拥有复杂状态的对象,它创建并恢复备忘录。在我们的示例代码中,可能有一个名为`Originator`的类,...

    备忘录模式实现及案例

    备忘录模式是一种设计模式,属于行为模式类型,它的主要作用是保存对象的状态,以便在需要的时候能够恢复到之前的状态。这种模式的核心在于提供一种方式,可以在不破坏封装的前提下,捕获并存储一个对象的内部状态,...

    设计模式之备忘录模式

    备忘录模式(Memento Pattern)是软件设计模式中的一种,属于行为模式。它提供了一种方式来恢复对象到之前的状态,即“撤销”操作。备忘录模式的核心思想是保存对象的内部状态,以便在需要时能恢复到这个状态,而...

    备忘录模式Demo

    备忘录模式是一种设计模式,它在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要记录用户操作或者游戏进度等场景,允许...

    设计模式之备忘录模式,内含可运行代码及详细解释

    备忘录模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在需要保护对象内部状态不被外部篡改的场景下。备忘录模式的核心思想是提供一种方法来捕获一个对象的内部状态,并在该对象之外保存这个状态...

    设计模式之备忘录模式的Java版本实现

    在Java中实现备忘录模式,我们通常会定义三个关键角色:原始对象(Originator)、备忘录(Memento)和照料者(Caretaker)。首先,原始对象创建并维护其状态,它知道如何创建备忘录,并且可以在需要时使用备忘录恢复...

    设计模式-备忘录模式(讲解及其实现代码)

    备忘录模式是一种在软件工程中广泛使用的面向对象设计模式,它主要用来安全地保存对象的状态,以便在需要时能够恢复到先前的状态。备忘录模式的核心思想是封装对象的状态,将其保存到一个独立的对象(备忘录)中,而...

    设计模式 - 备忘录模式(C++实例)

    在C++中,备忘录模式通常包含三个角色:发起人(Originator)、备忘录(Memento)和照料者(Caretaker)。发起人是创建和恢复状态的对象,备忘录负责存储发起人的状态,而照料者则负责管理备忘录,避免对发起人状态...

    备忘录模式(Memento) 注册时用的

    备忘录模式(Memento Pattern)是一种设计模式,它允许对象在不破坏封装性的前提下,捕获并存储其内部状态,以便在需要时恢复到先前的状态。这种模式常用于撤销/重做功能,或者在注册过程中保存用户信息,防止因意外...

    Java设计模式-备忘录

    在Java中,备忘录模式通常包含三个角色:**发起人(Originator)**、**备忘录(Memento)**和**照料者(Caretaker)**。 1. **发起人(Originator)**:这是创建备忘录并需要恢复状态的对象。它知道如何创建备忘录...

    备忘录模式 C++ 实现

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获和恢复一个对象的内部状态。在C++中实现备忘录模式,可以有效地帮助开发者在程序运行过程中保存对象的状态,以便在需要时恢复到之前的状态,这...

Global site tag (gtag.js) - Google Analytics