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

设计模式——备忘录模式

一、备忘录模式介绍

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

二、示例场景

假设有一个文本编辑器,用户可以在其中输入文本,并随时保存当前的文本状态,以便在需要时恢复到之前的状态。

三、具体实现

定义备忘录类(Memento):

class TextMemento {
public:TextMemento(const std::string& text) : text(text) {}std::string getText() const { return text; }
private:std::string text;
};

这个类用于存储文本编辑器的状态,即文本内容。

定义原发器类(Originator):

class TextEditor {
public:void setText(const std::string& newText) { text = newText; }TextMemento save() { return TextMemento(text); }void restore(const TextMemento& memento) { text = memento.getText(); }std::string getText() const { return text; }
private:std::string text;
};

原发器类代表文本编辑器,它有设置文本、保存当前状态为备忘录以及从备忘录恢复状态的方法。
定义管理者类(Caretaker):

class Caretaker {
public:void addMemento(const TextMemento& memento) { mementos.push_back(memento); }TextMemento getMemento(int index) const { return mementos[index]; }
private:std::vector<TextMemento> mementos;
};

管理者类用于存储多个备忘录对象,以便在需要时获取特定的备忘录来恢复文本编辑器的状态。
使用这些类:

int main() {TextEditor editor;Caretaker caretaker;editor.setText("Hello, world!");caretaker.addMemento(editor.save());editor.setText("Goodbye!");caretaker.addMemento(editor.save());editor.restore(caretaker.getMemento(0));std::cout << "Restored text: " << editor.getText() << std::endl;return 0;
}

在主函数中,创建了一个文本编辑器和一个管理者对象。首先设置文本内容并保存状态到管理者中,然后再次设置文本内容并保存状态。最后,恢复到第一个保存的状态并输出恢复后的文本内容。
通过这个例子,可以看到备忘录模式使得在不暴露对象内部结构的情况下,能够方便地保存和恢复对象的状态。


http://www.mrgr.cn/news/60248.html

相关文章:

  • Spring Boot 应用开发全攻略:从入门到精通
  • 【Docker】Dockerfile 用于组装镜像的指令都有啥?
  • 1024·云上见 | 10分钟构建能主动提问的智能导购助手活动参与教程
  • C++(this指针)
  • Rust 知识的 20 道练习题和详细解答
  • vue3 debounce 作用:函数会从其被调用时延迟执行到调用结束的这段时间内,如果该函数被再次调用,则重新计算时间。
  • gitlab如何重置密码
  • APP闪退原因
  • 【Spring MVC】请求参数的传递
  • 算力中心四大类型
  • 污水处理厂可视化系统:提升运营效率与环境监测能力
  • 电机---2电机的转速、扭矩、力矩之间的关系
  • CRC-DCO数据合规官:企业合规建设如何开展
  • 2024 Rust现代实用教程:变量与常见数据类型
  • QT linux 打包时库和插件如何生成
  • 行为识别SlowFast
  • 【MAE】掩码自回归编码器(论文复现)
  • Python小白学习教程从入门到入坑------第十七课 内置函数拆包(语法基础)
  • turtle海龟画图print
  • 轨迹规划 | 基于差速运动学的有模型PID算法(附ROS C++仿真)
  • 重磅!WebStorm 个人版免费开放:JetBrains 为个人开发者带来福音
  • 2024年北京海淀区中小学生信息学竞赛预选赛初复题目难度
  • Python忍者:如何悄无声息地获取Taobao商品详情?
  • 陈文自媒体:1年600万+,彻底改变命运!
  • 个人防护装备分割系统:全面扶持小白
  • 构建数据湖仓的开源技术栈有哪些