1. 程式人生 > >【JAVA設計模式】18.備忘錄模式

【JAVA設計模式】18.備忘錄模式

顧名思義,備忘錄模式用於當資訊發生改變時回溯回之前存在的某一個版本。

UML圖:

備忘錄類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());