Java备忘录模式(Memento)

article/2025/11/11 15:32:03

  本文我们来介绍下java23种设计模式中的备忘录模式。

备忘录模式Memento

使用场景

  1. 录入大批人员资料。正在录入当前人资料时,发现上一个人录错了,
    此时需要恢复上一个人的资料,再进行修改。
  2. Word文档编辑时,忽然电脑死机或断电,再打开时,可以看到word
    提示你恢复到以前的文档
  3. 管理系统中,公文撤回功能。公文发送出去后,想撤回来

核心内容

  就是保存某个对象内部状态拷贝,这样以后就可以将该对象恢复到原先的状态

结构说明
源发起类Originator负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态
备忘录类Memento负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问Memento
负责人类CareTaker负责保存好备忘录Memento

类图

在这里插入图片描述

具体实现

负责人类

/*** 负责人类* 负责管理备忘录对象* @author 波波烤鸭* @email dengpbs@163.com**/
public class CareTaker {private EmpMemento memento;//备忘点较多时,将备忘录压栈,将多个备忘录对象,序列化和持久化 实现撤回多步的操作// private Stack<Memento> stack = new Stack<Memento>();//	private List<EmpMemento> list = new ArrayList<EmpMemento>();public EmpMemento getMemento() {return memento;}public void setMemento(EmpMemento memento) {this.memento = memento;}
}

源发起类

/*** 源发器类* @author 波波烤鸭* @email dengpbs@163.com**/
public class Emp {private String ename;private int age;private double salary;//进行备忘操作,并返回备忘录对象public EmpMemento  memento(){return new EmpMemento(this);}//进行数据恢复,恢复成制定备忘录对象的值public void recovery(EmpMemento mmt){this.ename = mmt.getEname();this.age = mmt.getAge();this.salary = mmt.getSalary();}public Emp(String ename, int age, double salary) {super();this.ename = ename;this.age = age;this.salary = salary;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}
}

备忘录类

/*** 备忘录类* @author 波波烤鸭* @email dengpbs@163.com**/
public class EmpMemento {private String ename;private int age;private double salary;public EmpMemento(Emp e) {this.ename = e.getEname();this.age = e.getAge();this.salary = e.getSalary();}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}
}

测试类

public static void main(String[] args) {CareTaker taker = new CareTaker();Emp emp = new Emp("bobo烤鸭", 18, 880);System.out.println("第一次打印对象:"+emp.getEname()+"---"+emp.getAge()+"---"+emp.getSalary());taker.setMemento(emp.memento());   //备忘一次emp.setAge(28);emp.setEname("dpb");emp.setSalary(19000);System.out.println("第二次打印对象:"+emp.getEname()+"---"+emp.getAge()+"---"+emp.getSalary());emp.recovery(taker.getMemento()); //恢复到备忘录对象保存的状态	System.out.println("第三次打印对象:"+emp.getEname()+"---"+emp.getAge()+"---"+emp.getSalary());
}

输出

第一次打印对象:bobo烤鸭---18---880.0
第二次打印对象:dpb---28---19000.0
第三次打印对象:bobo烤鸭---18---880.0

撤回成功~~

开发中常见的应用场景:

  1. 棋类游戏中的,悔棋
  2. 普通软件中的,撤销操作
  3. 数据库软件中的,事务管理中的,回滚操作
  4. Photoshop软件中的,历史记录

http://chatgpt.dhexx.cn/article/s7K8HRyD.shtml

相关文章

Java设计模式之备忘录模式

Java设计模式之备忘录模式 1. 备忘录模式概述1.1 备忘录模式简介1.2 备忘录模式类图1.3 备忘录模式的注意事项和细节 2. 备忘录模式实现2.1 项目说明2.2 项目实现 1. 备忘录模式概述 1.1 备忘录模式简介 1.备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的…

【设计模式】备忘录模式

设计模式总结链接 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式&#xff0c;是对象的行为模式。   备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下&#xff0c;将一个对象的状态捕捉(Capture)住&#xff…

23种设计模式——备忘录模式

目录 备忘录模式&#xff08;Memento&#xff09; UML图 示例代码 适用场景 优缺点 备忘录模式和原型模式 例子——游戏进度存档 例子——象棋中的悔棋 备忘录模式&#xff08;Memento&#xff09; 本质&#xff1a;保存和恢复内部状态 备忘录模式&#xff1a;在不破坏…

23种设计模式之---备忘录模式

前言 网上搜索备忘录设计模式&#xff0c;基本上均是在一个GoF&#xff0c;基础上衍生下来的。为了避免重复造轮子&#xff0c;这里会结合网上demo&#xff0c;和自己理解进行总结 定义&#xff1a;备忘录&#xff08;Memento&#xff09;模式又称标记&#xff08;Token&…

备忘录模式介绍

备忘录模式介绍 一、基本介绍二、代码实现三、UML类图四、备忘录模式小结其他设计模式 一、基本介绍 备忘录模式&#xff08;Memento Pattern&#xff09;属于行为型模式&#xff0c;是指在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外…

设计模式 | 备忘录模式及典型应用

本文的主要内容&#xff1a; 介绍备忘录模式示例备忘录模式总结 备忘录模式 备忘录模式经常可以遇到&#xff0c;譬如下面这些场景&#xff1a; 浏览器回退&#xff1a;浏览器一般有浏览记录&#xff0c;当我们在一个网页上点击几次链接之后&#xff0c;可在左上角点击左箭头…

设计模式之备忘录模式

一、备忘录模式 备忘录模式&#xff08;Memento Pattern&#xff09;保存一个对象的某个状态&#xff0c;以便在适当的时候恢复对象。备忘录模式属于行为型模式。 原发器(Originator)角色&#xff1a;原发器根据需要决定将自己的哪些内部状态保存到备忘录中&#xff0c;并可以使…

备忘录模式(Java)

备忘录模式&#xff08;Java&#xff09; 下面是关于我所写的所有设计模式代码&#xff08;还是建议自己手打或者想一个别的例子练习一次&#xff09; (https://github.com/lihang212010/DesignPatterns-/tree/master/designpatterns/src) 先来张百度的UML 下面是我例子的U…

撤销功能的实现——备忘录模式(二)

21.2 备忘录模式概述 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便地回到一个特定的历史步骤&#xff0c;当新的状态无效或者存在问题时&#xff0c;可以使用暂时存储起来的备忘录将状态复原&#xff0c;当前很多软件都提供了撤销(Undo)操作&#xff0…

18-备忘录模式

文章目录 游戏角色状态恢复问题备忘录模式基本介绍备忘录模式解决游戏角色状态回复问题备忘录模式的注意事项和细节 游戏角色状态恢复问题 游戏鱼色有攻击力和防御力&#xff0c;在大战 Boss 前保存自身的状态&#xff08;攻击力和防御力&#xff09;&#xff0c;当大战 Boss …

详解设计模式:备忘录模式

详解设计模式&#xff1a;备忘录模式 备忘录模式&#xff08;Memento Pattern&#xff09;也被称为快照模式&#xff08;Snapshot Pattern&#xff09;、Token 模式&#xff08;Token Pattern&#xff09;&#xff0c;是在 GoF 23 种设计模式中定义了的行为型模式。 备忘录模式…

JAVA设计模式--备忘录模式

目录 一、什么是备忘录模式 二、备忘录模式的结构 三、备忘录模式的适用性 四、备忘录模式的实现 五、备忘录模式的优缺点 六、总结 一、什么是备忘录模式 备忘录(Memento)模式又叫作快照(Snapshot)模式或Token模式&#xff0c;是一种对象的行为模式。在备忘录模式里&am…

设计模式之备忘录模式(C++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、备忘录模式是什么&#xff1f; 备忘录模式是一种行为型的软件设计模式&#xff0c;在不破坏封装的前提下&#xff0c;获取一个…

什么是备忘录模式?

一、定义 备忘录模式又称快照模式&#xff0c;或者令牌模式。是指在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态&#xff0c;属于行为型模式。 二、通用写法及其uml 发起人角色&a…

行为型模式——备忘录模式(Memento Pattern)

文章目录 备忘录模式&#xff08;Memento Pattern&#xff09;什么是备忘录模式&#xff1f;UML角色应用使用模板 为什么要使用备忘录模式&#xff1f;优点&#xff1a;缺点&#xff1a; 怎样使用备忘录模式&#xff1f;在JDK中的使用 备忘录模式&#xff08;Memento Pattern&a…

备忘录模式

一、备忘录模式 1、定义 备忘录模式&#xff08;Memento Pattern&#xff09;又称作快照模式&#xff08;Snapshot Pattern&#xff09;&#xff0c;指在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态。这样以后就可将该对象恢复…

设计模式系列----备忘录模式

一、什么是备忘录模式 备忘录这个词汇大家应该都不陌生&#xff0c;我就经常使用备忘录来记录一些比较重要的或者容易遗忘的信息&#xff0c;与之相关的最常见的应用有许多&#xff0c;比如游戏存档&#xff0c;我们玩游戏的时候肯定有存档功能&#xff0c;旨在下一次登录游戏时…

基于MIMO讲解信道估计基本原理

为什么要进行信道估计&#xff1f; 信号在通过信道传输的时候&#xff0c;会受到信道中种种因素产生的噪声以及可能发生的多径效应&#xff0c;弄清信号经过的信道的特性&#xff0c;表征信道的技术/过程称为信道估计&#xff08;Channel Estimation&#xff09;。 注&#xf…

m基于深度学习的OFDM信道估计和均衡算法误码率matlab仿真,对比了LS,MMSE以及LMMSE等传统的信道估计算法

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 随着无线通信的快速发展,5G正逐渐成长为支撑全社会各行业运作的大型基础性互联网络,其服务范围的大幅扩展对底层技术提出了诸多挑战,尤其是作为物理层关键技术之一的正交频分复用(Orthogonal Fre…

IRS的信道估计基础代码

一、 智能反射平面&#xff08;intelligent reflecting surfaces&#xff09;是一种被动反射表面&#xff0c;其具有的特性是可控制反射信号的相位。 明确IRS是可控制反射信号的相位&#xff0c;所以以单个智能反射单元为例&#xff0c;该单元可调信号的参数可表示为​&#xf…