别把一辈子过成一天。
简介
备忘录模式是属于行为型设计模式的一种。
该模式的核心思想是在不破坏封装性的前提下,捕获一个对象的内部状态,并且在该对象之外保存捕获到的状态。这样做的意义是确保以后可以随时将该对象恢复到原来保存的某一状态时。
通俗点说备忘录模式就是通过一种特定的手段来记录一个对象的某一状态,或者是该对象的某些数据,当要做回退时,可以轻松的从备忘录中获取原来的状态、数据并进行恢复。
备忘录模式UML类图
类图讲解
Originator:原始对象,也可理解为需要做备忘的对象。 Memento:备忘录对象,该类的作用就是记录Originator的内容。 Caretaker:守护者对象,用于维护所有的Memento对象。 Client:客户端测试类。
案例讲解
案例:通过代码模拟平时我们进行撤回的操作。
备忘录类
public class Memento { // 数据 private String data; public Memento(String data) { this.data = data; } public String getData() { return data; } }
原始对象
public class Originator { // 数据 private String data; public String getData() { return data; } public void setData(String data) { this.data = data; } // 创建备忘录对象 public Memento createMemento() { return new Memento(data); } // 根据备忘录对象进行恢复 public void recover(Memento memento) { data = memento.getData(); } }
守护者类
public class Caretaker { private List<Memento> mementos = new ArrayList<>(); // 添加一个备忘录对象 public void add(Memento memento) { mementos.add(memento); } // 获取最近一次保存的备忘录对象 public Memento obtain() { return mementos.get(mementos.size() - 1); } }
客户端测试类
public class Client { public static void main(String[] args) { Originator originator = new Originator(); originator.setData("第一次:初始化"); System.out.println(originator.getData()); // 进行备忘 Memento memento = originator.createMemento(); Caretaker caretaker = new Caretaker(); caretaker.add(memento); // 修改数据 originator.setData("第二次:进行修改"); System.out.println(originator.getData()); // 还原数据 System.out.println("进行还原"); originator.recover(caretaker.obtain()); System.out.println(originator.getData()); } }
执行结果
总结
1、备忘录模式给用户提供了一种可恢复的机制,使得用户能够方便地回到某个历史的状态。
2、备忘录模式进行了信息的封装,用户使用时不需要关心状态保存的细节。
3、类的成员变量过多的话进行备份肯定会占用较大的资源,并且每一次的保存都会消耗一定的内存。
4、备忘录模式可以和原型模式配合使用,进而可以节约资源。