天天看點

設計模式——19備忘錄模式(Memento)

19、備忘錄模式(Memento)

主要目的是儲存一個對象的某個狀态,以便在适當的時候恢複對象,個人覺得叫備份模式更形象些,通俗的講下:假設有原始類A,A中有各種屬性,A可以決定需要備份的屬性,備忘錄類B是用來存儲A的一些内部狀态,類C呢,就是一個用來存儲備忘錄的,且隻能存儲,不能修改等操作。

Original類是原始類,裡面有需要儲存的屬性value及建立一個備忘錄類,用來儲存value值。Memento類是備忘錄類,Storage類是存儲備忘錄的類,持有Memento類的執行個體,該模式很好了解。直接看源碼:

[java] view plaincopy

public class Original {

private String value;

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

public Original(String value) {

public Memento createMemento(){

return new Memento(value);

public void restoreMemento(Memento memento){

this.value = memento.getValue();

public class Memento {

public Memento(String value) {

public class Storage {

private Memento memento;

public Storage(Memento memento) {

this.memento = memento;

public Memento getMemento() {

return memento;

public void setMemento(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

恢複後的狀态為:egg

簡單描述下:建立原始類時,value被初始化為egg,後經過修改,将value的值置為niu,最後倒數第二行進行恢複狀态,結果成功恢複了。其實我覺得這個模式叫“備份-恢複”模式最形象。