設計模式之備忘錄模式

定義

在不破壞封裝的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態,這樣可以在以後將對象恢復到原先保存的狀態。它是一種對象行爲型模式,其別名爲Token。

UML類圖

在這裏插入圖片描述

代碼實現

Originator.java

public class Originator {
    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public Memento createMemento() {
        return new Memento(state);
    }

    public void restore(Memento memento) {
        state = memento.getState();
    }
}

Memento.java

public class Memento {

    private String state;

    public Memento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }

}

Caretaker.java

public class Caretaker {

    private Memento memento;

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

    public Memento getMemento() {
        return memento;
    }
}

Main.java

Caretaker caretaker = new Caretaker();
Originator originator = new Originator();
originator.setState("A");

Memento memento = originator.createMemento();
caretaker.setMemento(memento);
System.out.println("Originator save state:"+originator.getState());
originator.setState("B");
System.out.println("Originator changed state:"+originator.getState());
originator.restore(caretaker.getMemento());
System.out.println("Originator restore state:"+originator.getState());

打印的結果:

Originator save state:A
Originator changed state:B
Originator restore state:A

優缺點

主要優點

  1. 它提供了一種狀態恢復的實現機制,使得用戶可以方便地回到一個特定的歷史步驟,當新的狀態無效或者存在問題時,可以使用暫時存儲起來的備忘錄將狀態復原。

  2. 備忘錄實現了對信息的封裝,一個備忘錄對象是一種原發器對象狀態的表示,不會被其他代碼所改動。備忘錄保存了原發器的狀態,採用列表、堆棧等集合來存儲備忘錄對象可以實現多次撤銷操作。

主要缺點

  1. 資源消耗過大,如果需要保存的原發器類的成員變量太多,就不可避免需要佔用大量的存儲空間,每保存一次對象的狀態都需要消耗一定的系統資源。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章