【JAVA设计模式】18.备忘录模式

顾名思义,备忘录模式用于当信息发生改变时回溯回之前存在的某一个版本。

UML图:

【JAVA设计模式】18.备忘录模式

备忘录类Memento,提供修改和获得内部信息的方法:

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;
    }
}

备忘录存放类CareTaker,提供了备忘录的赋值和取值方法,用于存储和回溯备忘录:

class Caretaker {

    private Memento memento;

    public Memento retrieveMemento() {
        return this.memento;
    }

    public void saveMemento(Memento memento) {
        this.memento = memento;
    }
}

用户操作的源对象,提供了生成备忘录以及恢复备忘录的方法:

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;
        System.out.println("当前状态:" + this.state);
    }
}

客户端使用:客户使用源对象,当对象需要记录至备忘录时,调用createMemento方法生成备忘录,并将其记录至Caretaker内,当需要恢复至备忘录状态时调用restoreMemento方法:

Originator o = new Originator();
Caretaker c = new Caretaker();
o.setState("On");
c.saveMemento(o.createMemento());
o.setState("Off");
o.restoreMemento(c.retrieveMemento());

JAVA代码:https://github.com/zhuaizhuaixi/design-pattern/tree/master/src/designpattern/behavioral/memento