設計模式(行爲型模式)——備忘錄模式(Memento)

本章講講第三類和第四類。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,最後倒數第二行進行恢復狀態,結果成功恢復了。其實我以爲這個模式叫「備份-恢復」模式最形象。源碼

相關文章
相關標籤/搜索