備忘錄設計模式

 備忘錄(Memento)模式又稱標記(Token)模式。GOF給備忘錄模式的定義爲:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。這樣以後就可將該對象恢復到原先保存的狀態。

/**
 * 發起人角色
 */
public class Originator {

    private String state;

    /**
     * 工廠方法返回一個新備忘錄對象
     */
    public MementoIF createMemento() {
        return new Memento(this.state);
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
        System.out.println("Current state is " + this.state);
    }

    /**
     * 將發起人恢復到備忘錄對象記錄的狀態
     */
    public void restoreMemento(MementoIF memento) {
        Memento aMemento = (Memento) memento;
        this.setState(aMemento.getSavedState());
    }

    /**
     * 內部成員類,備忘錄
     */
    protected class Memento implements MementoIF {
        private String savedState;

        public Memento(String someState) {
            this.savedState = someState;
        }

        public String getSavedState() {
            return savedState;
        }

        public void setSavedState(String savedState) {
            this.savedState = savedState;
        }
    }
}

 

public interface MementoIF {

}

 

/**
 * 負責人角色
 */
public class Caretaker {

    private MementoIF memento;
    /**
     * 備忘錄的取值方法
     */
    public MementoIF retrieveMemento() {
        return this.memento;
    }
    /**
     * 備忘錄的賦值方法
     */
    public void saveMemento(MementoIF memento) {
        this.memento = memento;
    }
}

 

public class Client {
    //發起人
    private static Originator originator = new Originator();
    //負責人
    private static Caretaker caretaker = new Caretaker();

    public static void main(String[] args) {
        //設置發起人對象狀態
        originator.setState("ON");
        //創建備忘錄對象將這個對象存儲起來
        caretaker.saveMemento(originator.createMemento());
        //改變發起人對象狀態
        originator.setState("OFF");
        //恢復發起人對象狀態
        originator.restoreMemento(caretaker.retrieveMemento());
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章