一、定义
备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。
二、结构
备忘录模式的结构
备忘录模式的主要角色如下。
1)发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。
2)备忘录(Memento)角色:负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
3)管理者(Caretaker)角色:对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。
结构图
三、代码实现
1 public class Client { 2 3 public static void main(String[] args) { 4 Originator originator = new Originator(); 5 Caretaker caretaker = new Caretaker(); 6 // 状态1 7 originator.setState("状态1"); 8 System.out.println("初始状态:" + originator.getState()); 9 caretaker.saveMemento(originator.createMemento()); 10 // 状态2 11 originator.setState("状态2"); 12 System.out.println("新的状态:" + originator.getState()); 13 // 恢复状态 14 originator.restoreMemento(caretaker.getLastMemento()); 15 System.out.println("恢复状态:" + originator.getState()); 16 } 17 } 18 19 // 备忘录 20 class Memento { 21 private String state; 22 23 public Memento(String state) { 24 this.state = state; 25 } 26 27 public String getState() { 28 return state; 29 } 30 31 public void setState(String state) { 32 this.state = state; 33 } 34 } 35 36 // 发起人 37 class Originator { 38 private String state; 39 40 public Memento createMemento() { 41 return new Memento(state); 42 } 43 44 public void restoreMemento(Memento m) { 45 this.setState(m.getState()); 46 } 47 48 public String getState() { 49 return state; 50 } 51 52 public void setState(String state) { 53 this.state = state; 54 } 55 } 56 57 // 管理者 58 class Caretaker { 59 private List<Memento> mementos = new ArrayList<>(); 60 61 public Memento getLastMemento() { 62 return mementos.get(mementos.size() - 1); 63 } 64 65 public void saveMemento(Memento memento) { 66 mementos.add(memento); 67 } 68 }