备忘录模式
备忘录模式:在不破坏封装新得前提下,捕获一个对象得内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
备忘录模式类图
- originator:对象(需要保存状态的对象)
- Menento : 备忘录对象,负责保存多个备忘录对象。
- Caretaker :守护者对象,负责保存多个备忘录对象。
备忘录模式简单实现
备忘录对象:
/**
* 备忘录对象
* @author gz
* @date 2020/9/28-0:18
*/
public class Memento {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Memento(String state) {
this.state = state;
}
}
需要保存状态的对象
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
//保存一个状态对象
public Memento saveStateMemento(){
return new Memento(state);
}
//通过备忘录对象,回复状态
public void getStateFromMemento(Memento memento){
state = memento.getState();
}
}
守护者对象:
public class Caretaker {
private List<Memento> mementoList = new ArrayList<Memento>();
public void add(Memento memento){
mementoList.add(memento);
}
public Memento get(int index){
return mementoList.get(index);
}
}
测试类:
public class Test {
public static void main(String[] args) {
Memento memento = new Memento("攻击力50");
Originator originator = new Originator();
Caretaker caretaker = new Caretaker();
originator.setState("攻击力五十");
caretaker.add(originator.saveStateMemento());
originator.setState("攻击力三十");
caretaker.add(originator.saveStateMemento());
originator.getStateFromMemento(caretaker.get(0));
System.out.println(originator.getState());
//攻击力五十
}
}
总结
给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便的回到某个状态。实现了信息的封装,是的用户不需要关系状态的保存细节。