概述
- 定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态
- 适用场景:
- 需要保存一个对象在某一个时刻的状态或部分状态
- 如果用一个接口来让其他对象得到这些状态,将会暴露对象的实现细节并破坏对象的封装性,一个对象不希望外界直接访问其内部状态,通过负责人可以间接访问其内部状态
实现
// 备忘录,负责记录对象状态
public class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
// 备忘录管理者,负责管理备忘录
class Caretaker {
private Memento memento;
public Caretaker(Memento memento) {
this.memento = memento;
}
public Memento getMemento() {
return memento;
}
}
// 要备份状态的对象
class Original {
private String state;
public Original(String state) {
this.state = state;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Memento createMemento() {
return new Memento(state);
}
public void restoreMemento(Memento memento) {
this.state = memento.getState();
}
}
// 客户端
public class Client {
public static void main(String[] args) throws Exception {
Original o = new Original("state 1");
System.out.println(o.getState());
Caretaker c = new Caretaker(o.createMemento());
o.setState("state 2");
System.out.println(o.getState());
o.restoreMemento(c.getMemento());
System.out.println(o.getState());
}
}
输出结果
state 1
state 2
state 1