场景引入
所谓备忘录,简单来说就是我们在生活中为了记录一件事情而写在记事本上。所以备忘录模式就是为了保存对象的内部状态,以便在之后的操作中可以返回到这个状态。就像是Linux系统中的快照,windows系统中还原点。这个模式的出发点就是:不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
UML图
originator(发起者):发起者是我们需要记住状态的对象,以便在某个时刻恢复他
CareTakere(管理者):负责触发发起者的变化或触发发起者返回先前状态的动作的类。在我的代码中就是Test类
Memento(备忘录):负责存储发起者内部状态的类。备忘录提供了设置和获取状态的方法。注意不能有修改的方法。
代码实现
Originator
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Memento saveState(){
return new Memento(state);
}
public void restore(Memento memento){
this.state = memento.getState();
}
@Override
public String toString() {
return "Originator{" +
"state='" + state + '\'' +
'}';
}
}
Memento
public class Memento {
public final String state;
public Memento(String state) {
this.state = state;
}
public String getState(){
return state;
}
}
Test
public class Test {
public static void main(String[] args) {
Originator ori = new Originator();
ori.setState("我是初始状态");
Memento memento = ori.saveState();
ori.setState("现在我切换新状态");
System.out.println(ori);
System.out.println("但是我觉得这个状态是我操作错误造成的,现在我要回到原始状态");
ori.restore(memento);
System.out.println(ori);
}
}