在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
需要备份的对象
public class Originator {
private String state1;
private String state2;
private String staten;
void setState1(String state1) {
this.state1 = state1;
}
String getState1() {
return state1;
}
// 创建备忘录
Memento createMemento() {
Memento memento = new Memento();
memento.setState1(state1);
memento.setStaten(staten);
return memento;
}
// 恢复状态
void restoreMemento(Memento memento) {
this.state1 = memento.getState1();
this.staten = memento.getStaten();
}
}
备份对象
@Data
public class Memento {
private String state1;
private String staten;
}
看管人:负责管理备份
public class Caretaker {
private final Map<String,Memento> history = new HashMap<>();
// 保存备忘录
public void saveMemento(String name,Memento memento) {
history.put(name,memento);
}
// 获取备忘录
public Memento getMemento(String name) {
return history.get(name);
}
public Memento removeMemento(String name) {
return history.remove(name);
}
}
public class Client {
public static void main(String[] args) {
// 创建发起人
Originator originator = new Originator();
// 创建负责人
Caretaker caretaker = new Caretaker();
// 设置发起人的状态
originator.setState1("State 1");
System.out.println("Current State: " + originator.getState1());
// 保存状态
caretaker.saveMemento("第一次备份", originator.createMemento());
// 修改发起人的状态
originator.setState1("State 2");
System.out.println("Updated State: " + originator.getState1());
// 恢复状态
originator.restoreMemento(caretaker.getMemento("第一次备份"));
System.out.println("Restored State: " + originator.getState1());
}
}
Current State: State 1
Updated State: State 2
Restored State: State 1