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

【C++】备忘录模式

目录

  • 一、模式核心概念与结构
  • 二、C++ 实现示例:文本编辑器撤销功能
  • 三、备忘录模式的关键特性
  • 四、应用场景
  • 五、备忘录模式与其他设计模式的关系
  • 六、C++ 标准库中的备忘录模式应用
  • 七、优缺点分析
  • 八、实战案例:游戏角色状态存档
  • 九、实现注意事项
    • 如果这篇文章对你有所帮助,渴望获得你的一个点赞!

备忘录模式(Memento Pattern)是一种【行为型】设计模式,它允许在不破坏对象封装性的前提下,捕获并保存对象的内部状态,以便后续可以将对象恢复到先前的状态。这种模式通过将状态保存和恢复操作分离,实现了对象状态管理的职责分离。

一、模式核心概念与结构

备忘录模式包含三个核心角色:

  1. 原发器(Originator):创建备忘录并使用备忘录恢复内部状态的对象。
  2. 备忘录(Memento):存储原发器内部状态的对象,通常提供有限的访问权限。
  3. 管理者(Caretaker):负责保存备忘录,但不检查或修改备忘录的内容。

二、C++ 实现示例:文本编辑器撤销功能

以下是一个简单的文本编辑器示例,演示如何使用备忘录模式实现撤销功能:

#include <iostream>
#include <string>
#include <memory>
#include <vector>// 前向声明
class Memento;// 原发器:文本编辑器
class TextEditor {
private:std::string content;public:void setContent(const std::string& text) {content = text;std::cout << "Current content: " << content << std::endl;}std::string getContent() const {return content;}// 创建备忘录std::shared_ptr<Memento> createMemento() const;// 从备忘录恢复void restoreFromMemento(std::shared_ptr<Memento> memento);
};// 备忘录
class Memento {
private:std::string savedContent;public:Memento(const std::string& content) : savedContent(content) {}// 仅供原发器访问的内部状态friend class TextEditor;
};// 实现原发器的方法
std::shared_ptr<Memento> TextEditor::createMemento() const {return std::make_shared<Memento>(content);
}void TextEditor::restoreFromMemento(std::shared_ptr<Memento> memento) {content = memento->savedContent;std::cout << "Restored content: " << content << std::endl;
}// 管理者:历史记录
class History {
private:std::vector<std::shared_ptr<Memento>> mementos;public:void saveState(std::shared_ptr<Memento> memento) {mementos.push_back(memento);std::cout << "State saved. History size: " << mementos.size() <<
http://www.lryc.cn/news/578420.html

相关文章:

  • mini-electron使用方法
  • 时空数据挖掘五大革新方向详解篇!
  • 多探头分布式雷达测流系统解决方案概述
  • HakcMyVM-Arroutada
  • 软考中级【网络工程师】第6版教材 第1章 计算机网络概述
  • CompletableFuture源码分析
  • Android 网络全栈攻略(四)—— TCPIP 协议族与 HTTPS 协议
  • 计算机网络:【socket】【UDP】【地址转换函数】【TCP】
  • 基于Netty-WebSocket构建高性能实时通信服务
  • CloudBase AI ToolKit实战:从0到1开发一个智能医疗网站
  • ethtool -S dev 计数
  • Docker进阶命令与参数——AI教你学Docker
  • 内网和外网可以共享一台打印机吗?怎么设置实现跨网电脑远程连接打印
  • 【LlamaIndex核心组件指南 | Prompt篇】深度解析LlamaIndex提示模板的设计与实战
  • 原神八分屏角色展示页面(纯前端html,学习交流)
  • browser-tools-mcp + excel-mcp-server + cursor 实现读取网页信息自动写入Excel
  • 4D 毫米波雷达
  • 注意力得分矩阵求解例子
  • AR衍射光波导设计遇瓶颈,OAS 光学软件来破局
  • mac部署dify
  • SQL Server 进阶:递归 CTE+CASE WHEN 实现复杂树形统计(第二课)
  • 大模型-分布式论文一瞥
  • 安全左移(Shift Left Security):软件安全的演进之路
  • 51单片机制作万年历
  • 如何在电脑上完全抹去历史记录
  • Leetcode力扣解题记录--第49题(map)
  • 闲庭信步使用SV搭建图像测试平台:第二十三课——图像的直方图叠加
  • torch.nn
  • 美团2025年02.15架构师面试分享1
  • 飞算JavaAI—AI编程助手 | 编程领域的‘高科技指南针’,精准导航开发!