ivaneye.com

语言与模式-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没有对象的概念,直接对数据进行操作!

想想如何保存数据到文件,或从文件恢复数据!需要模式吗?