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

备忘录模式

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

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

http://www.xdnf.cn/news/6951.html

相关文章:

  • 简单使用Slidev和PPTist
  • UI-TARS本地部署
  • 【C++】map和set的使用
  • 为什么需要加密机服务?
  • 牛客网NC21989:牛牛学取余
  • 信奥赛CSP动态规划入门-最小硬币问题
  • mac下载mysql
  • k8s备份namespace
  • 系统安全及应用
  • H2数据库源码学习+debug, 数据库 sql、数据库引擎、数据库存储从此不再神秘
  • 组态王|如何创建组态王工程?
  • 宝塔面板屏蔽垃圾搜索引擎蜘蛛和扫描工具的办法
  • Docker 容器技术原理及实践:从入门到部署实战
  • 基于LLM合成高质量情感数据,提升情感分类能力!!
  • Java、ssm(AI) 2025/5/17
  • JavaScript:PC端特效-从mouseenter和mouseover的区别到动画函数
  • 202537 |《代码整洁之道》笔记
  • Linux进程异常退出排查指南
  • C++ 手撕shared_ptr
  • 基于朴素贝叶斯与 LSTM 的假新闻检测模型对比分析
  • Linux容器技术详解
  • TransmittableThreadLocal使用场景
  • 编译原理实验五:LR语法分析器的控制程序
  • 类方法_静态方法_实例方法
  • RAG流程介绍
  • [Windows] 自动关机辅助工具 Shutdown Timer Classic 1.2.3
  • 反向海淘爆发期:独立站系统如何打造跨境代购新基建?​
  • BrepGen中的几何特征组装与文件保存详解 deepwiki occwl OCC包装库
  • 如何用AI优化简历:自动读取与精华浓缩
  • Python训练营打卡 Day28