備忘錄模式(Memento Pattern),在不破壞封裝的前提下,捕獲一個對象的内部狀态,并在該對象之外儲存這個狀态。這樣以後就可以就該對象恢複到原先儲存的狀态。
當系統功能比較複雜,而且需要記錄曆史屬性以便當需要時做恢複動作。Originator可以根據儲存的Memento資訊還原到前一狀态。
Originator類:發起人。
CreateMemento方法,負責建立一個備忘錄,用于記錄目前時刻它的内部狀态。
SetMemento方法,使用備忘錄回複狀态。
Show方法,展示狀态。
Originator類:可以決定備忘錄Memento存儲Originator的哪些狀态。
Memento類:備忘錄,負責存儲Originator的内部狀态,并可防止Originator以外的其他對象通路備忘錄Memento
Caretaker類:負責儲存備忘錄Memento,不能對備忘錄的内容進行操縱和檢查。
1、發起人類Originator
public class Originator
{
private string _state;
public string State
{
get { return _state; }
set { _state = value; }
}
/// <summary>
/// 建立備忘錄,将目前要儲存的資訊導入并執行個體化備忘錄
/// </summary>
public Memento CreateMemento()
return (new Memento(this.State));
/// 恢複備忘錄,将Memento導入并将相關資料恢複
/// <param name="memento"></param>
public void SetMemento(Memento memento)
this.State = memento.State;
/// 展示狀态資料
public void Show()
Console.WriteLine("目前狀态是:"+this.State);
}
2、備忘錄類Memento
public class Memento
public Memento(string state)
this.State = state;
3、管理者類Caretaker
public class Caretaker
private Memento _memento;
public Memento Memento
get { return _memento; }
set { _memento = value; }
4、用戶端代碼
static void Main(string[] args)
Originator o = new Originator();
//初始狀态為On
o.State = "On";
o.Show();
//建立備忘錄并儲存狀态
Caretaker caretaker = new Caretaker();
caretaker.Memento=o.CreateMemento();
//更改Originator狀态=Off
o.State = "Off";
//恢複到原始狀态
o.SetMemento(caretaker.Memento);
Console.ReadKey();
本文轉自 靈動生活 51CTO部落格,原文連結:http://blog.51cto.com/smartlife/270083,如需轉載請自行聯系原作者