備忘錄模式(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 類圖(取自維基百科):
1 thoughts on “設計模式-備忘錄模式”