本章講講第三類和第四類。java
備忘錄模式(Memento)this
主要目的是保存一個對象的某個狀態,以便在適當的時候恢復對象,我的以爲叫備份模式更形象些,通俗的講下:假設有原始類A,A中有各類屬性,A能夠決定須要備份的屬性,備忘錄類B是用來存儲A的一些內部狀態,類C呢,就是一個用來存儲備忘錄的,且只能存儲,不能修改等操做。作個圖來分析一下:rest
Original類是原始類,裏面有須要保存的屬性value及建立一個備忘錄類,用來保存value值。Memento類是備忘錄類,Storage類是存儲備忘錄的類,持有Memento類的實例,該模式很好理解。直接看源碼code
public class Original { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public Original(String value) { this.value = value; } public Memento createMemento(){ return new Memento(value); } public void restoreMemento(Memento memento){ this.value = memento.getValue(); } }
public class Memento { private String value; public Memento(String value) { this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
public class Storage { private Memento memento; public Storage(Memento memento) { this.memento = memento; } public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; } }
public class Test { public static void main(String[] args) { // 建立原始類 Original origi = new Original("egg"); // 建立備忘錄 Storage storage = new Storage(origi.createMemento()); // 修改原始類的狀態 System.out.println("初始化狀態爲:" + origi.getValue()); origi.setValue("niu"); System.out.println("修改後的狀態爲:" + origi.getValue()); // 回覆原始類的狀態 origi.restoreMemento(storage.getMemento()); System.out.println("恢復後的狀態爲:" + origi.getValue()); } }
輸出:對象
初始化狀態爲:egg
修改後的狀態爲:niu
恢復後的狀態爲:eggget
簡單描述下:新建原始類時,value被初始化爲egg,後通過修改,將value的值置爲niu,最後倒數第二行進行恢復狀態,結果成功恢復了。其實我以爲這個模式叫「備份-恢復」模式最形象。源碼