設計模式-備忘錄模式

備忘錄模式(Memento Pattern)

類型:行為相關

定義:在不違反封裝的原則下,取得一個物件的內部狀態並保留在外部,讓物件可以在日後恢復到原先保留的狀態。

解釋:存檔系統,透過備忘錄類別將原本某個類別中的狀態存起來,在需要的時候可以讀取這個狀態。對於備忘錄本身還有另一個類別用來管理數個備忘錄。

參與者有以下3個:

記錄擁有者(Originator):擁有要被儲存的資料,會在內部自動保存與讀取資料,不向外提供存取內部資料的方法。

記錄保存者(Memento):保存資料,資料必須由記錄擁有者主動提供。

管理記錄保存者(Caretaker):管理與儲存Originator產出的Memento。

 

簡易程式範例:

public class Originator
{
    private string simpleData;
    public Memento Save()
    {
        Memento memento = new Memento();
        memento.Data = simpleData;
        return memento;
    }
    public void Load(Memento memento)
    {
        simpleData = memento.Data;
    }
}
public class Memento
{
    public string Data { get; set; }
}
public class Caretaker
{
    private Dictionary<string, Memento> saveTable = new Dictionary<string, Memento>();
    public void AddMemento(string saveName, Memento memento)
    {
        if (saveTable.ContainsKey(saveName))
        {
            saveTable[saveName] = memento;
        }
        else
        {
            saveTable.Add(saveName, memento);
        }
    }
    public Memento GetMemento(string saveName)
    {
        if (saveTable.ContainsKey(saveName))
        {
            return saveTable[saveName];
        }
        else
        {
            return null;
        }
    }
}

UML 類圖(取自維基百科):

備忘錄模式UML
備忘錄模式UML

memento-pattern-animation

1 thoughts on “設計模式-備忘錄模式

發表留言