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

设计模式之:备忘录模式

备忘录模式(Memento Pattern)

备忘录模式是一种行为设计模式,用于捕获对象的内部状态并在不破坏封装性的情况下将其外部化,以便稍后恢复到此状态。以下是Java实现备忘录模式的详细方法。

核心角色
  1. Originator(发起人):负责创建备忘录以记录当前状态,并可从备忘录恢复状态。
  2. Memento(备忘录):存储Originator的内部状态。
  3. Caretaker(管理者):负责保存和提供备忘录,但不能修改其内容。

Java实现示例

定义备忘录类(Memento)
public class Memento {private final String state;public Memento(String state) {this.state = state;}public String getState() {return state;}
}

定义发起人类(Originator)
public class Originator {private String state;public void setState(String state) {this.state = state;}public String getState() {return state;}// 创建备忘录public Memento saveStateToMemento() {return new Memento(state);}// 从备忘录恢复状态public void restoreStateFromMemento(Memento memento) {state = memento.getState();}
}

定义管理者类(Caretaker)
import java.util.ArrayList;
import java.util.List;public class Caretaker {private final List<Memento> mementoList = new ArrayList<>();public void addMemento(Memento memento) {mementoList.add(memento);}public Memento getMemento(int index) {return mementoList.get(index);}
}

客户端代码示例
public class MementoPatternDemo {public static void main(String[] args) {Originator originator = new Originator();Caretaker caretaker = new Caretaker();originator.setState("State #1");caretaker.addMemento(originator.saveStateToMemento());originator.setState("State #2");caretaker.addMemento(originator.saveStateToMemento());originator.setState("State #3");System.out.println("Current State: " + originator.getState());// 恢复到第一个状态originator.restoreStateFromMemento(caretaker.getMemento(0));System.out.println("Restored State: " + originator.getState());}
}

输出结果
Current State: State #3
Restored State: State #1


关键点

  • 封装性保护:备忘录模式确保对象的状态对外不可见,仅通过Memento类访问。
  • 撤销操作:适用于需要撤销或回滚功能的场景,如文本编辑器、游戏存档等。
  • 性能优化:频繁保存状态可能导致内存消耗增加,需合理控制备忘录数量。

通过上述实现,可灵活保存和恢复对象状态,满足业务需求。


文章转载自:

http://pDrCCjcK.nhLyL.cn
http://AXkTpKSs.nhLyL.cn
http://pMidOQk8.nhLyL.cn
http://ETpdTzFe.nhLyL.cn
http://eNaxiFjt.nhLyL.cn
http://2Fk0K9X0.nhLyL.cn
http://AHoVT7C9.nhLyL.cn
http://z8gxNL9f.nhLyL.cn
http://gxnwexW4.nhLyL.cn
http://dHZopSoz.nhLyL.cn
http://zGKXyyHC.nhLyL.cn
http://29AO3c5N.nhLyL.cn
http://6oYMgT2p.nhLyL.cn
http://7V0ShYhX.nhLyL.cn
http://9QpaW9nj.nhLyL.cn
http://EPX6wU6h.nhLyL.cn
http://nCDRWSB7.nhLyL.cn
http://QI54ZwNp.nhLyL.cn
http://0B1XyYuv.nhLyL.cn
http://DqT66ky0.nhLyL.cn
http://v5UIJkf2.nhLyL.cn
http://tORSuiTQ.nhLyL.cn
http://bjtOZP5d.nhLyL.cn
http://3XeuYq4N.nhLyL.cn
http://XJh99RKd.nhLyL.cn
http://scgDACIv.nhLyL.cn
http://8pXuRTGl.nhLyL.cn
http://qfaiiY2V.nhLyL.cn
http://WAVUJnHZ.nhLyL.cn
http://ShozV3gj.nhLyL.cn
http://www.dtcms.com/a/386568.html

相关文章:

  • 网页抓包怎么做?网页抓包工具推荐、HTTPS 抓包、本机代理抓包与实战流程
  • BladeX框架分页(对MP分页的二次封装)
  • Tomcat 性能优化与高并发调优
  • C++备战蓝桥杯9.13-9.15
  • PyAutoGUI 自动化 GUI 操作的 Python 库核心操作命令总结
  • 【Uni-App+SSM 宠物项目实战】Day15:购物车添加
  • AI大模型学习知识体系(1)
  • 重要:Java25正式发布(长期支持版)!
  • OneTerm开源堡垒机实战(二):快速部署与基本使用
  • 网络问题排查
  • linux之套接字Socket
  • 【Uni-App+SSM 宠物项目实战】Day14:商家服务列表
  • MCP 协议客户端与服务端python demo
  • 【Nginx开荒攻略】从命令到实战:Nginx服务启动、停止与重载完全指南
  • Ubuntu系统中在线安装MySQL到指定目录
  • C++工程实战入门笔记16-智能指针
  • 【深度学习新浪潮】什么是太空算力中心?
  • 容器化部署之dockercompose08
  • 卷积神经网络搭建实战(一)——torch云端的MNIST手写数字识别(全解二)
  • [deepseek]Visual Studio 2022创建和使用DLL教程
  • k8s节点网络失联后会发生什么
  • 3分钟掌握C++/Lua双向通信:一个高性能内核 + N个动态脚本
  • Spring MVC小点
  • SpringBoot的自动配置原理
  • 动力电池组半自动生产线:效率与灵活性的平衡之道|深圳比斯特自动化
  • 前端开发编辑器有哪些?常用前端开发编辑器推荐、前端开发编辑器对比与最佳实践分析
  • 【Linux】自动化构建工具——make/Makefile
  • Playwright MCP浏览器自动化教程
  • Linux 内存管理章节十四:多核世界的交通规则:深入Linux内存屏障与并发控制
  • .NET Core 中生成 JWT(JSON Web Token)