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

Java设计模式之《备忘录模式》

目录

1. 概念

1.1、定义

1.2、适用场景

2、角色划分

3、实现

1、Originator(发起人)

2、Memento(备忘录)

3、Caretaker(管理者)

4、使用示例

4、优缺点

4.1、优点

4.2、缺点


前言

        备忘录模式是一种行为型设计模式,用于在不破坏封装性的情况下保存和恢复对象的状态。它包含源发器、备忘录管理者三个角色。

        该模式常用于撤销操作,如文本编辑器的撤销功能和数据库事务管理。

        备忘录模式虽然有内存占用和性能开销的缺点,但在需要状态管理的场景中十分有用。

设计模式分类如下:


1. 概念

1.1、定义

        备忘录模式(Memento Pattern))用于在不破坏对象封装性的前提下,捕获一个对象的内部状态,并在需要时恢复这个状态(如撤销操作)。

        即允许对象把当前状态保存到外部对象中。以后可将其恢复。

1.2、适用场景

1、需要保存和恢复数据场景(如撤销、历史快照、存档、游戏进度、表单编辑器等)。

2、不希望外部对象随意访问对象内部细节,但需要保存和恢复快照。


2、角色划分

如下图所示:

  • Originator(发起人/原发器):拥有内部状态,需要保存和恢复
  • Memento(备忘录):保存Originator的状态
  • Caretaker(管理者/看护者):保存并管理备忘录,但不能操作备忘录内部实现内容


3、实现

1、Originator(发起人)

class Editor {private String text;public void setText(String text) { this.text = text; }public String getText() { return text; }public Memento save() { return new Memento(text); }public void restore(Memento m) { this.text = m.getText(); }
}

2、Memento(备忘录)

class Memento {private final String text;public Memento(String text) { this.text = text; }public String getText() { return text; }
}

3、Caretaker(管理者)

import java.util.Stack;
class Caretaker {private Stack<Memento> history = new Stack<>();public void add(Memento m) { history.push(m); }public Memento undo() {if (!history.isEmpty()) return history.pop();return null;}
}

4、使用示例

public class Main {public static void main(String[] args) {Editor editor = new Editor();Caretaker caretaker = new Caretaker();editor.setText("第一版");caretaker.add(editor.save());editor.setText("第二版");caretaker.add(editor.save());editor.setText("第三版");// 撤销到第二版editor.restore(caretaker.undo());System.out.println(editor.getText()); // 输出 第二版// 再撤销editor.restore(caretaker.undo());System.out.println(editor.getText()); // 输出 第一版}
}

4、优缺点

4.1、优点

1、状态保存与恢复:

        备忘录模式可以帮助我们保存对象的状态,并在需要时恢复到之前的状态。这在某些情况下非常有用,比如撤销操作或者程序崩溃后的恢复。

2、封装性和隔离性:

        可以确保对象的状态保存在备忘录对象中,而不会暴露给其他对象。这为对象的封装性和隔离性提供了保护,使得对象的状态变化对其他对象是透明的。


4.2、缺点

1、内存占用:

        可能引起较大的内存占用,特别是当对象的状态较多且状态改变频繁时。每个备忘录对象都需要保存一份完整的状态,如果状态较多或者备忘录对象较多,可能会消耗大量内存。

2、性能开销:

        备忘录模式涉及到创建、存储和恢复状态的操作,这些操作可能引起一定的性能开销。特别是在状态较大或者对象较复杂的情况下,备忘录模式的性能可能会受到影响。


总结:


参考文章:

1、设计模式(十九)行为型:备忘录模式详解-CSDN博客文章浏览阅读443次,点赞19次,收藏21次。备忘录模式(Memento Pattern)是 GoF 23 种设计模式中的行为型模式之一,其核心价值在于在不破坏封装性的前提下,捕获并外部化一个对象的内部状态,以便在之后能够将该对象恢复到原先保存的状态。 https://blog.csdn.net/ZxqSoftWare/article/details/149712206?ops_request_misc=%257B%2522request%255Fid%2522%253A%252299945c753ba5cd13ba1abf9c2213f646%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=99945c753ba5cd13ba1abf9c2213f646&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-149712206-null-null.142^v102^control&utm_term=%E5%A4%87%E5%BF%98%E5%BD%95%E6%A8%A1%E5%BC%8F&spm=1018.2226.3001.4187

http://www.dtcms.com/a/304951.html

相关文章:

  • 80V降5V,输出电流4A,应用于车载充电器
  • 工厂方法模式 Factory Method Pattern
  • 监控场景视频质量异常修复:陌讯动态增强算法实战解析
  • 深入浅出设计模式——创建型模式之建造者模式 Builder
  • LangChain API 功能介绍和使用示例
  • 单卡10分钟部署MiniCPM4-0.5B:轻量级大模型本地运行指南
  • ESP8266 AT 固件
  • Linux信号量:进程同步与互斥的核心机制
  • 人形机器人指南(十四)集成
  • 248°视野里的温柔革命:当清洁成为治愈城市的艺术
  • Qt 移动应用界面设计原则
  • 智能Agent场景实战指南 Day 23 : Agent安全与隐私保护
  • C++异常捕获:为何推荐按引用(by reference)捕获?
  • 【LeetCode 热题 100】(二)双指针
  • 基于Java+SQLServer2017实现(Web)酒店客房管理系统
  • MongoDB系列教程-教程概述
  • 系统选择菜单(ubuntu grub)介绍
  • 标量子查询 外表有多少重复值决定filter次数 转化 left join
  • Python三大Web框架:FastAPI vs Flask vs Django 详解与快速入门指南
  • BreachForums 黑客论坛强势回归
  • windows软件ARM64和AMD64(x64)区别,如何查看电脑支持哪种
  • JVM易混淆名称
  • 大型微服务项目:听书——多端重复提交订单问题适配器模式实现不同支付方式的选择零钱支付逻辑
  • 爬虫逆向之瑞数五案例:某某医学院(补环境,联调)
  • 适配器模式的三种C++实现
  • 宠物经济行业研究系列报告
  • electron-vite 动态加载脚本 实现动态插件
  • 如何为你的WordPress网站选择合适的安全插件
  • 【效率工具】255款工作计划表格Excel电子版模板:总结日月周报日历安排提醒时间管理
  • 遍历-找到匹配的节点