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

设计模式(行为型模式)备忘录模式

目录

    • 一、简介
    • 二、备忘录模式
      • 2.1、备忘录
      • 2.2、原发器
      • 2.3、备忘录模式
    • 三、优点与缺点

一、简介

  备忘录模式(Memento Pattern)是一种行为设计模式,旨在捕获一个对象的内部状态,并在不破坏对象封装的前提下将其保存,以便稍后可以恢复到先前的状态。

  备忘录模式指的是在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,从而在需要时能将对象恢复到先前的状态。这种模式涉及三个主要角色:原发器(Originator)、备忘录(Memento)和管理者(Caretaker)。

  • 原发器(Originator):负责创建一个备忘录,并记录当前状态到备忘录对象,也可以从备忘录对象中恢复状态。
  • 备忘录(Memento):用于存储原发器对象的内部状态。备忘录可以记录原发器对象的部分或全部状态。
  • 管理者(Caretaker):负责存储备忘录对象,但不能对备忘录的内容进行操作,只能够将备忘录传递给其他对象。

  备忘录模式允许在不暴露对象实现细节的情况下保存和恢复对象的状态,提供了一种方便的方式来回滚对象的状态到先前的状态,以支持撤销和恢复等操作。

二、备忘录模式

  当涉及到备忘录模式时,一个经典的案例是文本编辑器中的撤销(Undo)和恢复(Redo)功能。我们先创建一个简单的文本编辑器示例,展示如何使用备忘录模式实现撤销和恢复功能:

2.1、备忘录

// 备忘录:用于保存文本编辑器的状态
public class TextEditorMemento {private final String content;public TextEditorMemento(String content) {this.content = content;}public String getContent() {return content;}
}

2.2、原发器

import java.util.Stack;// 原发器:文本编辑器
public class TextEditor {private String content;private final Stack<TextEditorMemento> history;public TextEditor() {this.content = "";this.history = new Stack<>();}public void write(String text) {saveState();content += text;}public void undo() {if (!history.isEmpty()) {content = history.pop().getContent();}}private void saveState() {history.push(new TextEditorMemento(content));}public void printContent() {System.out.println("当前内容: " + content);}
}

2.3、备忘录模式

// 测试类
public class MementoPatternExample {public static void main(String[] args) {TextEditor editor = new TextEditor();editor.write("Hello ");editor.write("GoLang!");editor.printContent(); // 输出:当前内容: Hello GoLang!editor.undo();editor.printContent(); // 输出:当前内容: Hello }
}

运行结果:

当前内容: Hello GoLang!
当前内容: Hello 

三、优点与缺点

  备忘录模式具有以下优点和缺点:

优点

  • 封装性良好: 备忘录模式可以在不破坏对象封装性的前提下,捕获和保存对象的状态,对客户端隐藏了对象的实现细节。
  • 状态保存与恢复: 允许在需要时将对象状态保存到备忘录中,并在之后将对象恢复到先前的状态,支持撤销和恢复操作。
  • 简化原发器类: 备忘录模式可以使得原发器类的代码更加简洁,将状态保存和恢复的责任分离出去。

缺点

  • 资源消耗: 当需要频繁保存状态时,会消耗一定的内存资源,尤其是当状态对象非常大或者对象频繁变动时。
  • 潜在性能问题: 保存大量状态信息可能会影响性能,特别是当备忘录对象的管理成本增加时。
  • 不适合大规模对象: 对于大规模的对象,保存和管理其多个状态可能会变得复杂和低效。

  总的来说,备忘录模式适用于需要保存和恢复对象状态、支持撤销和恢复操作的场景。它提供了一种简单、清晰的方式来管理对象状态,但需要权衡资源消耗和性能问题。通常在需要保存状态快照以支持撤销操作的情况下才会使用备忘录模式。

http://www.lryc.cn/news/295452.html

相关文章:

  • opencv案例实战:条码区域分割
  • 《MySQL》超详细笔记
  • 商用密码
  • css1文本属性
  • 在容器中使用buildah构建镜像
  • GPT4_VS_ChatGPT(from_nytimes)
  • 中兴R5300G4服务器查看服务器、主板序列号及硬盘RAID信息
  • 部署tomcat
  • 【Java 数据结构】枚举
  • Python(20)正则表达式(Regular Expression)中常用函数用法
  • docker 离线安装镜像
  • 由vscode自动升级导致的“终端可以ssh服务器,但是vscode无法连接服务器”
  • typecho 在文章中添加 bilibili 视频
  • Android.mk 语法详解
  • ChatGPT高效提问—prompt基础
  • Elasticsearch 中的索引的分区(Shards)和副本(Replicas)的使用
  • 智慧工地反光衣识别检测系统-自动识别是否穿着制定工作服---豌豆云
  • vue绘制语音波形图---wavesurfer.js
  • MPLS——多协议标签交换
  • Idea使用Lombok失效解决方案
  • Java实现网上药店系统 JAVA+Vue+SpringBoot+MySQL
  • 谁是嫌疑犯问题
  • Netty中使用编解码器框架
  • 【漏洞复现】斐讯FIR151M路由器未授权下载漏洞
  • 【SpringBoot】application配置(5)
  • Linux安全技术与iptables防火墙
  • QT QCombox 样式表 比起作用
  • 在 Windows 10 上使用 Visual Studio 2022 进行 C++ 桌面开发
  • 如何安装x11vnc并结合cpolar实现win远程桌面Deepin
  • C++基础入门Day1