Java设计模式-备忘录模式

news/2025/1/12 8:45:37/

简介

在软件开发中,设计模式是为了解决常见问题而提出的一种经过验证的解决方案。备忘录模式(Memento Pattern)是一种行为型设计模式,它允许我们在不破坏封装性的前提下,捕获和恢复对象的内部状态。

备忘录模式是一种对象行为型设计模式,其目标是在不破坏封装性的情况下,捕获和恢复对象的内部状态。它通过在不同的时间点创建快照(即备忘录)来实现这一目标,这样可以在以后的某个时间点将对象恢复到之前的状态。备忘录模式基于三个核心角色:发起人(Originator)、备忘录(Memento)和负责人(Caretaker)。

备忘录模式与其他设计模式有明显的区别。与观察者模式关注对象状态的变化不同,备忘录模式关注的是对象状态的保存和恢复。与迭代器模式的重点是提供对集合元素的遍历和访问不同,备忘录模式的关注点在于对象状态的管理。此外,备忘录模式还与命令模式、模板方法模式等有所区别,因为备忘录模式主要涉及对象状态的管理和恢复。

实现

在Java编程语言中,我们可以使用以下步骤实现备忘录模式:

  1. 定义发起人类(Originator):发起人类负责创建备忘录对象,并可以使用备忘录对象来恢复其内部状态。它还提供了设置和获取内部状态的方法。
  2. 定义备忘录类(Memento):备忘录类用于存储发起人对象的内部状态。它可以由发起人对象创建,并由发起人对象恢复其内部状态。
  3. 定义负责人类(Caretaker):负责人类负责保存备忘录对象,并在需要时将其返回给发起人对象。

下面是一个简单的示例代码,展示了如何在Java中实现备忘录模式:

// 发起人类
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();}
}// 备忘录类
class Memento {private final String state;public Memento(String state) {this.state = state;}public String getState() {return state;}
}// 负责人类
class Caretaker {private Memento memento;public void saveMemento(Memento memento) {this.memento = memento;}public Memento retrieveMemento() {return memento;}
}// 示例使用
public class Main {public static void main(String[] args) {Originator originator = new Originator();Caretaker caretaker = new Caretaker();originator.setState("State 1");originator.setState("State 2");caretaker.saveMemento(originator.saveStateToMemento());originator.setState("State 3");caretaker.saveMemento(originator.saveStateToMemento());originator.setState("State 4");System.out.println("Current state: " + originator.getState());originator.restoreStateFromMemento(caretaker.retrieveMemento());System.out.println("Restored state: " + originator.getState());}
}

优缺点

优点

  1. 封装性:备忘录模式允许对象在不破坏封装性的情况下保存和恢复其内部状态。
  2. 可扩展性:备忘录模式可以轻松地扩展以支持更多的状态保存和恢复需求。
  3. 简化原发器:备忘录模式可以帮助原发器简化其代码,将状态管理交给备忘录和负责人类。

缺点

  1. 内存消耗:如果备忘录对象的状态较大或备忘录数量过多,将会消耗较大的内存。
  2. 性能开销:保存和恢复状态的过程可能会导致性能开销,特别是在需要频繁保存和恢复状态时。

运用场景

  1. 需要保存和恢复对象状态的情况,例如撤销操作。
  2. 需要实现检查点功能,以便在某个时间点恢复对象状态。
  3. 需要在不破坏封装性的情况下保存和恢复对象状态。

总结

备忘录模式是一种行为型设计模式,通过在不破坏封装性的前提下,捕获和恢复对象的内部状态。在Java中,我们可以使用发起人、备忘录和负责人类来实现备忘录模式。备忘录模式的优点包括封装性和可扩展性,但也存在内存消耗和性能开销的缺点。备忘录模式适用于需要保存和恢复对象状态的情况,并且在某些特定的应用场景中发挥作用。通过合理地运用备忘录模式,我们可以提高代码的灵活性和可维护性,从而改善软件系统的设计和开发过程。


http://www.ppmy.cn/news/87348.html

相关文章

【CCF- CSP 202104-2 邻域均值 二维数组前缀和满分题解】

代码思路: 本题如果直接用暴力求解的话只能得70分。 运用到了二维数组的前缀和,难点是如何求出二维数组的前缀和并计算出领域所有元素的和。 注意计算平均数的时候要保证精度相同,所有都要化为double型,否则会出错。 首先&…

iptables 讲解

文章目录 简介1. 什么是 iptables?2. iptables 的工作原理3. iptables 的基本概念链 (Chain)表 (Table)规则 (Rule) 4. iptables 的安装和配置5. 常见的 iptables 命令iptables 的基本语法添加规则删除规则查看规则 6. iptables 的规则匹配匹配条件匹配选项匹配动作…

LabVIEWCompactRIO 开发指南36 确定“Clock Ticks”或模拟时间

LabVIEWCompactRIO 开发指南36 确定“Clock Ticks”或模拟时间 桌面执行节点可以控制模拟时间,因此开发人员可以使用模拟I/O在开发计算机上执行期间更改关键点的激励。要成功使用此功能,需要测量FPGA VI完成所需的时间,或者需要以直观地知道…

h5stream默认密码是Vision@168

如果是r16及以上版本,HTTP默认端口为18085, HTTPS 默认端口为18445。 默认的用户名:admin 密码:12345,从14.15版本开始,默认密码为Vision168 官网文档地址 https://linkingvision.cn/download/documentation/h5stream/H5S%E8%A7%86%E9%A2%91…

基于pytest的接口测试框架详解,一定有你想知道的

目录 需求一:一套用例可以测试多套环境 需求二: 可以被jenkins调度执行 需求三 拥有测试报告 需求四:接口中某些字段值在每次请求中不重复 需求五: 可以多接口关联测试 需求六 构造的表数据可以和接口字段数据关联 需求七 pytest用例和…

弹性盒子,概念,常用属性

概念:弹性是一种布局方式,推荐使用在移动端,PC端不推荐。dispaly:block防止flex产生效果。 使用:display:flex; 弹性盒子常用的属性: display: flex; flex-wrap: wrap; //是否允许自动换行 flex-direction: column; //…

编程练习【寻找数组的中心下标】

给你一个整数数组 nums ,请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点…