Java备忘录模式(Memento)

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


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

备忘录模式Memento

使用场景

   录入大批人员资料。正在录入当前人资料时,发现上一个人录错了,

   此时需要恢复上一个人的资料,再进行修改。

   Word文档编辑时,忽然电脑死机或断电,再打开时,可以看到word

   提示你恢复到以前的文档

   管理系统中,公文撤回功能。公文发送出去后,想撤回来

核心内容

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

结构 说明

源发起类Originator 负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态

备忘录类Memento 负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问Memento

负责人类CareTaker 负责保存好备忘录Memento

类图

image.png

具体实现

负责人类

/**
 * 负责人类
 * 负责管理备忘录对象
 * @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

撤回成功~~

开发中常见的应用场景:

   棋类游戏中的,悔棋

   普通软件中的,撤销操作

   数据库软件中的,事务管理中的,回滚操作

   Photoshop软件中的,历史记录


相关文章
|
4月前
|
设计模式 存储 Java
23种设计模式,备忘录模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】备忘录模式是一种行为设计模式,它能在不破坏对象封装的前提下,捕获并保存对象的当前状态,以便后面可以恢复到这个状态。
72 0
|
4月前
|
设计模式 存储 Java
Java设计模式【十九】:备忘录模式
Java设计模式【十九】:备忘录模式
36 0
|
11月前
|
设计模式 存储 Java
【设计模式——学习笔记】23种设计模式——备忘录模式Memento(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——备忘录模式Memento(原理讲解+应用场景介绍+案例介绍+Java代码实现)
79 0
|
2天前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
3月前
|
设计模式 存储 Java
Java设计模式之备忘录模式详解
Java设计模式之备忘录模式详解
|
4月前
|
设计模式 存储 Java
聊聊Java设计模式-备忘录模式
备忘录模式(Memento Design Pattern),也叫快照(Snapshot)模式。指在不违背封装原则前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。
59 0
聊聊Java设计模式-备忘录模式
|
4月前
|
存储 Rust Java
备忘录模式 rust和java的实现
备忘录模式 rust和java的实现
45 0
|
设计模式 存储 Java
Java中23种面试常考的设计模式之备忘录模式(Memento)---行为型模式
Java中23种面试常考的设计模式之备忘录模式(Memento)---行为型模式
66 1
|
设计模式 Java
时光倒流:解析Java设计模式中的备忘录模式
在软件开发领域,设计模式是一组经过验证的最佳实践方法,用于解决各种常见问题。备忘录模式是一种行为型设计模式,其目标是在不破坏对象封装的前提下,捕获对象的内部状态,并将其保存在外部以备将来恢复。在本文中,我们将深入了解备忘录模式的核心思想、应用场景以及它在Java中的实际运用。
95 0
|
设计模式 存储 Java
理解Java设计模式中的备忘录模式:实现数据的快照和恢复
理解Java设计模式中的备忘录模式:实现数据的快照和恢复