当前位置: 首页 > news >正文

备忘录模式

1.意图

        备忘录模式是一种行为型设计模式,允许在不破坏封装的特性前提,获取并保存一个对象的内部状态,后续需要时恢复该状态。核心是将对象的状态存储在一个独立的备忘录对象中,并在需要时恢复。

2.模式类型

       行为型对象设计模式

3.UML图

上述类的表示:

        a.Originator 负责创建 Memento 并恢复状态。

        b.Caretaker 存储多个 Memento,但不修改其内容。

        c.Memento 仅提供 getState() 方法,确保封装性。

4.优缺点

        优点:

        提供了恢复状态机制,且保持对象的封装性,支持撤销操作。

        缺点:

        耗费内存,且增加了代码的复杂度,频繁的操作性能下降。

5.示例代码

#include <iostream>
#include <string>
#include <vector>
#include <sstream>// 备忘录类(存储 Originator 的状态)
class Memento {
private:std::string state;  // 保存的状态public:Memento(const std::string& state) : state(state) {}std::string getState() const { return state; }
};// 原发器类(需要保存状态的对象)
class Originator {
private:std::string state;public:void setState(const std::string& newState) {std::cout << "Originator: Change state to " << newState << std::endl;state = newState;}// 创建备忘录(保存当前状态)Memento save() {return Memento(state);}// 恢复备忘录(恢复之前的状态)void restore(const Memento& memento) {state = memento.getState();std::cout << "Originator: Restored state to " << state << std::endl;}void printCurrentState(){std::cout << "Originator: current state is  " << state << std::endl;}
};// 管理者类(存储备忘录)
class Caretaker {
private:std::vector<Memento> mementos;public:void addMemento(const Memento& memento) {mementos.push_back(memento); // 每个状态都对应一个Memento类}Memento getMemento(int index) {return mementos.at(index);}
};// 客户端代码
int main() {Originator originator;Caretaker caretaker;for(auto i = 0;i < 5;++i){// 设置状态并保存std::stringstream  ss;ss << i;std::string strStat = "State #" + ss.str();originator.setState(strStat);caretaker.addMemento(originator.save());}originator.printCurrentState();// 恢复到第一个状态originator.restore(caretaker.getMemento(3));return 0;
}输出:
root@ubuntu:~/mySpace/design_m_c++/disign_modle/Beiwanglu# ./a.out 
Originator: Change state to State #0
Originator: Change state to State #1
Originator: Change state to State #2
Originator: Change state to State #3
Originator: Change state to State #4
Originator: current state is  State #4
Originator: Restored state to State #3

综上即为备忘录模式特点。 

相关文章:

  • 类的加载过程详解
  • LINQ:统一查询语法的强大工具
  • 服务端HttpServletRequest、HttpServletResponse、HttpSession
  • 前端动画库 Anime.js 的V4 版本,兼容 Vue、React
  • 初始C++:类和对象(中)
  • 游戏引擎学习第293天:移动Familiars
  • 线程池核心线程永续机制:从源码到实战的深度解析
  • 继MCP、A2A之上的“AG-UI”协议横空出世,人机交互迈入新纪元
  • 学习黑客Active Directory 入门指南(五)
  • 32LED心形灯程序源代码
  • Java大师成长计划之第26天:Spring生态与微服务架构之消息驱动的微服务
  • 4:OpenCV—保存图像
  • Spring AI Alibaba集成阿里云百炼大模型应用
  • 05 部署Nginx反向代理
  • 【Linux高级全栈开发】2.1.2 事件驱动reactor的原理与实现
  • 【运营商查询】批量手机号码归属地和手机运营商高速查询分类,按省份城市,按运营商移动联通电信快速分类导出Excel表格,基于WPF的实现方案
  • ChatGPT:OpenAI Codex—一款基于云的软件工程 AI 代理,赋能 ChatGPT,革新软件开发模式
  • RISC-V 开发板 MUSE Pi Pro V2D图像加速器测试,踩坑介绍
  • 抖音视频怎么去掉抖音号水印
  • uni-app学习笔记七-vue3事件处理
  • “当代阿炳”甘柏林逝世,创办了国内第一所残疾人高等学府
  • 三件珍贵标本开箱!中国恐龙大展5月26日在沪开幕,明星标本汇聚一堂
  • “80后”南京大学天文与空间科学学院教授施勇加盟西湖大学
  • 美国务卿与以色列总理通话,讨论加沙局势
  • 朱雀二号改进型遥二运载火箭发射成功
  • 全国多家健身房女性月卡延长,补足因月经期耽误的健身时间