備忘錄:在不破壞封裝的前提下,捕獲一個對象的內部狀態,併在該對象之外保存這個狀態,這樣以後就可將該對象恢復到原先保存的狀態。 舉例如下: Originator:發起人,負責創建一個備忘錄Memento,用以記錄當前時刻它的內部狀態,並可使用備忘錄恢復內部狀態。它根據需要決定Memento存儲Orig ...
備忘錄:在不破壞封裝的前提下,捕獲一個對象的內部狀態,併在該對象之外保存這個狀態,這樣以後就可將該對象恢復到原先保存的狀態。
舉例如下:
Originator:發起人,負責創建一個備忘錄Memento,用以記錄當前時刻它的內部狀態,並可使用備忘錄恢復內部狀態。它根據需要決定Memento存儲Originator的哪些內部狀態。
/// <summary> /// Memo的保存和使用者 /// </summary> class Originiator { public string State { get; set; } public Memo CreateMemo() { return (new Memo(State)); } public void SetMemo(Memo memo) { this.State = memo.State; } }
Memento:備忘錄,負責存儲Originator對象的內部狀態,並可防止Originator以外的其他對象訪問備忘錄。它有兩個介面,MemoTaker只能看到備忘錄的窄介面,它只能將備忘錄傳遞給其他對象,Originator能夠看到一個寬介面,允許它訪問返回到先前狀態所需的所有數據
/// <summary> /// 需要保存的Memo模板 /// </summary> class Memo { private string state; public string State { get { return state; } } public Memo(string state) { this.state = state; } }
MemoTaker:管理者,負責保存備忘錄Memento,不能對備忘錄的內容進行操作或檢查
/// <summary> /// 用於保存歷史Memo的類,Memo中的狀態數據可以被Originator使用 /// </summary> class MemoTaker { public Memo memo { get; set; } }
客戶端使用備忘錄:
//生成初始狀態 Originiator role = new Originiator(); role.State = "OK"; //保存一個Memo MemoTaker taker = new MemoTaker(); taker.memo = role.CreateMemo();
//修改當前狀態 role.State = "Hi"; //恢復一個Memo role.SetMemo(taker.memo);
備忘錄模式:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,併在該對象之外保存這個狀態,這樣以後就可將該對象恢復到原先保存的狀態。
它適用於功能比較複雜,但需要維護和記屬性歷史的類,或者需要保存的屬性只是眾多屬性中的一小部分時,Originator可以根據保存的Memo信息還原到前一狀態。
使用該模式可以把複雜的對象內部信息對其他的對象屏蔽起來,從而可以恰當的保持封裝的邊界。