语言与模式-14备忘录模式
意图
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。
适用性
- 必须保存一个对象在某一个时刻的(部分)状态, 这样以后需要时它才能恢复到先前的状态。
- 如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。
Java实现
public class Memento {
private String state;
public Memento(String state){
this.state = state;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
public class Originator {
private String state;
public Memento createMemento(){
return new Memento(state);
}
public void restoreMemento(Memento memento){
this.state = memento.getState();
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
public class Caretaker {
private Memento memento;
public Memento retrieveMemento(){
return memento;
}
public void saveMemento(Memento memento){
this.memento = memento;
}
}
public class Client {
private static Originator o = new Originator();
private static Caretaker c = new Caretaker();
public static void main(String[] args) {
//改变发起人的状态
o.setState("on");
//创建备忘录对象,并保持于管理保持
c.saveMemento(o.createMemento());
//改变发起人的状态
o.setState("off");
//还原状态
o.restoreMemento(c.retrieveMemento());
}
}
Clojure实现
Clojure没有对象的概念,直接对数据进行操作!
想想如何保存数据到文件,或从文件恢复数据!需要模式吗?