备忘录模式
备忘录模式主要解决那些需要记录状态(数据)的类,恢复状态的问题,这个和状态模式有些类似,状态模式解决状态之间流转问题,即状态流转是事先固定在状态类内部的;备忘录解决的类的某一时刻状态的记录,其实也就是类在某一时刻的数据,而数据的变化不是事先固定的,有一定的不确定性并且不需要流转,但需要数据全面
类图:
原发类:
可以使用内部类方式(黑盒方式,不暴露自己数据结构),也可以使用外部类方式
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
// 创建状态
public Memento createMemento() {
return new ConcrateMemento(state);
}
// 恢复状态
public void restoreMemento(Memento memento) {
this.state = ((ConcrateMemento) memento).state;
}
// 内部类方式实现,不对外暴露数据结构,其实状态类存的就是原发类的数据
private class ConcrateMemento implements Memento {
private String state;
public ConcrateMemento(String state) {
this.state = state;
}
}
}
备忘录类:
这里只是使用一个声明式接口而已,具体实现在原发类中
public interface Memento {
}
负责人类:
负责人类只是持有状态,可以省略,省略就将备忘录模式变为自诉历史的备忘录模式,也可以扩展,即持有多个状态,就变为了多重检查点的备忘录模式
public class Caretaker {
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}