备忘录模式(行为型)
设计模式的3个分类:创建型模式、结构型模式、行为型模式
备忘录模式定义:
备忘录模式是一种行为型设计模式,允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。
备忘录模式图示:
代码实现:
/** * 原始类 */ public class Originator { private String state; public String getState() { return state; } public void setState(String state) { this.state = state; } //保存状态到备忘录对象 public Memento saveStateMemento() { return new Memento(state); } //通过备忘录对象,恢复状态 public void getStateFromMemento(Memento memento) { state = memento.getState(); } } /** * 备忘录类 */ class Memento { private String state; public Memento(String state) { this.state = state; } public String getState() { return state; } } /** * 守护者类,负责保存多个"备忘录对象" */ public class CareTaker { //在List集合中会有很多的备忘录对象 private List<Memento> mementoList = new ArrayList<>(); public void add(Memento memento) { mementoList.add(memento); } //获取到第index个Originator的备忘录对象 public Memento get(int index) { return mementoList.get(index); } } /** * 测试 */ public class MementoPatternDemo { public static void main(String[] args) { Originator originator = new Originator(); CareTaker careTaker = new CareTaker(); originator.setState("State 1 ... ");//此状态没有被保存,因此也不能被恢复 originator.setState("State 2 ... "); careTaker.add(originator.saveStateMemento()); originator.setState("State 3 ..."); careTaker.add(originator.saveStateMemento()); originator.setState("State 4 ..."); careTaker.add(originator.saveStateMemento()); System.out.println("当前的状态是: " + originator.getState()); originator.getStateFromMemento(careTaker.get(0)); System.out.println("恢复到保存到第1个状态:" + originator.getState()); originator.getStateFromMemento(careTaker.get(1)); System.out.println("恢复到保存到第2个状态:" + originator.getState()); originator.getStateFromMemento(careTaker.get(2)); System.out.println("恢复到保存到第3个状态:" + originator.getState()); } } //输出 当前的状态是: State 4 ... 恢复到保存到第1个状态:State 2 ... 恢复到保存到第2个状态:State 3 ... 恢复到保存到第3个状态:State 4 ...
参考:
https://www.tutorialspoint.com/design_pattern/memento_pattern.htm