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

备忘录模式:状态管理的时光机器

引言:对象状态的时空穿越

在软件开发中,我们经常遇到需要保存和恢复对象状态的场景:

  • 文本编辑器的撤销/重做功能
  • 游戏进度的存档与读档
  • 事务操作的回滚机制
  • 表单数据的草稿保存

备忘录模式正是为解决这类问题而生的设计模式。它提供了一种在不破坏封装性的前提下捕获并外部化对象的内部状态,以便在需要时恢复对象到先前状态的能力。本文将深入剖析备忘录模式的原理、实现及高级应用场景。


一、模式定义与核心思想

1.1 官方定义

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

1.2 设计哲学

创建
恢复
存储
原发器Originator
备忘录Memento
负责人Caretaker

核心原则

  1. 封装保护:不暴露对象内部状态细节
  2. 状态分离:将状态保存逻辑与业务逻辑解耦
  3. 历史管理:支持多状态快照管理

二、模式结构解析

2.1 UML类图

创建和使用
存储
Originator
-state: Object
+createMemento() : Memento
+restoreMemento(Memento)
Memento
-state: Object
+getState() : Object
+setState(Object)
Caretaker
-mementos: List
+addMemento(Memento)
+getMemento(int) : Memento

2.2 关键角色

角色职责示例
Originator创建备忘录文本编辑器
Memento存储状态编辑器快照
Caretaker管理备忘录历史记录管理器

三、代码实战:文本编辑器实现

3.1 场景描述

实现文本编辑器的核心功能:

  • 文本内容编辑
  • 保存当前状态
  • 支持多次撤销/重做
  • 支持指定版本恢复

3.2 核心实现

// 备忘录接口
public interface EditorMemento {// 空接口,用于类型标记
}// 文本备忘录
public class TextMemento implements EditorMemento {private final String content;private final long timestamp;public TextMemento(String content) {this.content = content;this.timestamp = System.currentTimeMillis();}public String getContent() {

相关文章:

  • Elasticsearch 的自动补全以及RestAPI的使用
  • vue3 导出表格,合并单元格,设置单元格宽度,文字居中,修改文字颜色
  • 一篇文章理解js闭包和作用于原理
  • 模板字符串使用点击事件【VUE3】
  • shell使用for循环批量统计文件的行数
  • spring boot项目整合mybatis实现多数据源的配置
  • Day13_C语言基础(C语言考试试卷)
  • 测试完成的标准是什么?
  • CoSchedule Headline Analyzer:分析标题情感强度与可读性
  • 深度学习-163-MCP技术之使用Cherry Studio调用本地自定义mcp-server
  • 【AIGC】Qwen3-Embedding:Embedding与Rerank模型新标杆
  • 为什么电流、电压相同,功率却不同
  • 积分商城拼团系统框架设计
  • ssh连接踢出脚本
  • vulnyx Exec writeup
  • AI基础知识(07):基于 PyTorch 的手写体识别案例手册
  • DNS常用的域名记录
  • shell分析nginx日志的指令
  • COHERENT XPRV23光电接收器控制软件
  • RAG实战:基于LangChain的《肖申克的救赎》知识问答系统构建指南
  • 网站建设需要java吗/适合女生去的培训机构
  • wordpress多人聊天室/宿州百度seo排名软件
  • 网站需要什么服务器/网站运营维护的基本工作
  • 网站上传模板后/电工培训内容
  • 广东制作公司网站/seo新人培训班
  • 虚拟主机网站建设步骤?/seo网站优化收藏