备忘录模式
备忘录(Memento)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
结构图:
Originator:发起者,创建备忘录来记录内部状态,并可以利用备忘录恢复。
Caretaker:管理者,负责保存备忘录。
Memeto:备忘录,记录Originator内部状态。
例:
public class Memeto { // 备忘录 private String state; public Memeto(String state) { // 记录数据到备忘录 this.state = state; } public String getState() { return state; } public void setState(String state) { this.state = state; } }
public class Caretaker { // 管理者 private Memeto memeto; public Memeto getMemeto() { // 获取备忘录 return memeto; } public void setMemeto(Memeto memeto) { // 设置备忘录 this.memeto = memeto; } }
public class Originator { // 发起者 private String state; public String getState() { return state; } public void setState(String state) { this.state = state; } public Memeto createMemeto(){ // 创建备忘录 return new Memeto(state); } public void setMemeto(Memeto memeto){ // 恢复备忘录 this.state=memeto.getState(); } }
public class Test { public static void main(String[] args) { Originator originator = new Originator(); originator.setState("状态1"); // 设置初始状态1 System.out.println("初始状态:" + originator.getState()); Caretaker caretaker = new Caretaker(); caretaker.setMemeto(originator.createMemeto()); // 利用originator创建初始状态1的备忘录,然后由caretaker负责保存 originator.setState("状态2"); // 更改状态 System.out.println("更改后的状态:" + originator.getState()); originator.setMemeto(caretaker.getMemeto()); // 恢复保存到备忘录的状态 System.out.println("恢复初始状态后的状态:" + originator.getState()); } }
输出:
初始状态:状态1
更改后的状态:状态2
恢复初始状态后状态:状态1