設計模式系列
定義:將一個物件內部狀態儲存在另一個備忘錄物件中,備忘錄物件可用來還原物件狀態。
Originator:專門表牛內部狀態的物件,例如遊戲Role Status,文書編輯器文字。
Memento:保留Originator內部狀態資料物件,EX:遊戲存檔的資料
Caretaker:主要功用管理Memento物件
主要解決:在不破壞封裝前提下,捕捉物件內部狀態,在該物件之外保存這個狀態,可以
日後將物件回復原先保存狀態。
使用時機:需要記錄物件內部狀態,為了能讓操作者取消或不確定,恢復之前狀態。
如何解決:透過一個備忘錄專門儲存物件狀態。
應用實例:遊戲存檔、Windows CTRL+Z。
優點:提供回復狀態機制,可回到先前狀態、實現訊息封裝,使用者不需要關心狀態保存細節。
缺點:消耗資源,因為類別的屬性變數過多,且每一次保存都會消耗一定的記憶體資源。
class Program
{
static void Main(string[] args)
{
Originator o = new Originator();
o.State = "On";
o.Show();
Caretaker c = new Caretaker();
c.Memento = o.CreateMemento();
o.State = "Off";
o.Show();
o.SetMemento(c.Memento);
o.Show();
Console.Read();
}
}
class Originator
{
private string state;
public string State
{
get { return state; }
set { state = value; }
}
public Memento CreateMemento()
{
return (new Memento(state));
}
public void SetMemento(Memento memento)
{
state = memento.State;
}
public void Show()
{
Console.WriteLine("State="+ state);
}
}
class Memento
{
private string state;
public Memento(string state)
{
this.state = state;
}
public string State { get { return state; } }
}
class Caretaker
{
public Memento Memento { get; set; }
}
元哥的筆記