当前位置: 首页> 科技> 能源 > C++设计模式---备忘录模式

C++设计模式---备忘录模式

时间:2025/9/4 1:23:15来源:https://blog.csdn.net/qq_34486832/article/details/140295165 浏览次数:0次

1、介绍

        备忘录模式是一种行为型设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后将对象恢复到原先保存的状态。

该模式主要涉及三个角色:

        (1)发起人(Originator):这是需要保存和恢复状态的对象。发起人通常包含需要保存的状态数据,以及创建备忘录和从备忘录中恢复状态的方法。

        (2)备忘录(Memento):用于存储发起人对象状态的对象。备忘录通常具有访问状态数据的方法,但不能直接修改状态。

        (3)管理者(Caretaker):负责管理备忘录的对象。它可以保存多个备忘录对象,并提供对备忘录的访问,通常提供了保存和恢复状态的接口。

2、示例

#include <iostream>
#include <string>// 备忘录类,用于存储游戏角色的状态
class RoleStateMemento {
private:int m_vit;  // 生命力int m_atk;  // 攻击力int m_def;  // 防御力public:RoleStateMemento(int vit, int atk, int def) : m_vit(vit), m_atk(atk), m_def(def) {}// 设置生命力void setVitality(int vit) { m_vit = vit; }int getVitality() { return m_vit; }// 设置攻击力void setAttack(int atk) { m_atk = atk; }int getAttack() { return m_atk; }// 设置防御力void setDefense(int def) { m_def = def; }int getDefense() { return m_def; }
};// 发起人,即游戏角色
class GameRole {
private:int m_vit;  // 生命力int m_atk;  // 攻击力int m_def;  // 防御力public:// 保存角色状态,返回备忘录对象RoleStateMemento* saveState() {return new RoleStateMemento(m_vit, m_atk, m_def);}// 恢复角色状态,根据备忘录对象设置角色状态void recoverState(RoleStateMemento* memento) {m_vit = memento->getVitality();m_atk = memento->getAttack();m_def = memento->getDefense();}// 获取初始状态void getInitState() {m_atk = m_def = m_vit = 100;}void fight() {m_atk = m_def = m_vit = 0;}void stateDisplay() {std::cout << "角色当前状态:" << std::endl;std::cout << "体力:" << m_vit << " "<< "攻击力:" << m_atk << " "<< "防御力:" << m_def << std::endl;}
};// 管理者,用于管理备忘录对象
class RoleStateCaretaker {
private:RoleStateMemento* m_memento;public:~RoleStateCaretaker() {delete m_memento;}void setMemento(RoleStateMemento* memento) {m_memento = memento;}RoleStateMemento* getMemento() {return m_memento;}
};int main() {// 大战 boss 前GameRole* lixiaoyao = new GameRole;lixiaoyao->getInitState();lixiaoyao->stateDisplay();// 保存进度RoleStateCaretaker* stateAdmin = new RoleStateCaretaker;stateAdmin->setMemento(lixiaoyao->saveState());// 大战 boss 时,损耗严重lixiaoyao->fight();lixiaoyao->stateDisplay();// 恢复之前状态lixiaoyao->recoverState(stateAdmin->getMemento());lixiaoyao->stateDisplay();delete lixiaoyao;delete stateAdmin;return 0;
}

结果:

角色当前状态:
体力:100 攻击力:100 防御力:100
角色当前状态:
体力:0 攻击力:0 防御力:0
角色当前状态:
体力:100 攻击力:100 防御力:100
关键字:C++设计模式---备忘录模式

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: