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

Java设计模式-备忘录模式

简介

在软件开发中,设计模式是为了解决常见问题而提出的一种经过验证的解决方案。备忘录模式(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.lryc.cn/news/90013.html

相关文章:

  • Zookeeper集群 + Kafka集群
  • “邮件营销新趋势,这个平台让你收获颇丰!
  • Python列表推导
  • git使用查看分支、创建分支、合并分支
  • vue3.0与vue2.0
  • HTML 中的常用标签用法
  • 【C++】指针 - 定义和使用,所占内存空间,空指针,野指针,const 修饰指针,指针和数组,指针和函数
  • 新规之下产业园区如何合理收费水电费用
  • 1011. 在 D 天内送达包裹的能力
  • 基于SpringBoot养老院管理系统
  • 1.3 eBPF的工作原理初探
  • 【CH32】| 02——常用外设 | GPIO
  • 第四章 测试用例编
  • 解决dpdk reserve的内存返回的虚拟地址和iova地址一样的问题
  • JQuery实现小项目
  • 【C++/嵌入式笔试面试八股】一、23.结构体指针 | 指针和引用 | 万能指针 | 野指针
  • 【C++初阶】类和对象(下)构造函数(初始化列表) + explicit关键字 +static成员
  • chatgpt赋能python:Python代码怎么用?一个10年编程经验工程师的实践总结
  • 【Android定制】修改BUILD_AGO_GMS = no 和 BUILD_GMS=no属性
  • 第十章:C语言的调试
  • 【20】SCI易中期刊推荐——计算机信息系统工程电子与电气(中科院3区)
  • 初识网络之UDP网络套接字
  • 数据中心末端配电的数字化方案及设备选型
  • k8s入门实战-Service
  • Python量化交易:策略创建运行流程
  • 企业该如何自主构建信息化管理系统?
  • linuxOPS基础_操作系统概述
  • 常用adb命令记录下
  • Etcdctl 命令v3
  • 第二十一章 开发Productions - ObjectScript Productions - 延迟发送