設計模式學習筆記-備忘錄模式

來源:互聯網
上載者:User

概述:                                                                                                         

備忘錄模式(Memento):在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外儲存這個狀態,這樣以後就可將該對象恢複到原先儲存的狀態。

應用場合:                                                                                                    

1.必須儲存一個對象在某一時刻(部分)的狀態,這樣以後需要時它才能恢複到先前的狀態。

2.如果用一個介面來讓其他對象直接得到這個狀態,將會暴露對象的實現細節並破壞對象的封裝性。

類圖:                                                                                                          

代碼結構執行個體:                                                                                                 

1.建立一個備忘錄類

    /// <summary>
/// 備忘錄類
/// </summary>
class Memento
{
private string _state;

public Memento(string state)
{
this._state = state;
}
public string State
{
get { return _state; }
}
}

2.發起人類

  /// <summary>
/// 發起人類
/// </summary>
class Originator
{
/// <summary>
/// 需要儲存的屬性
/// </summary>
private string state;
public string State
{
get { return state; }
set { state = value; }
}
/// <summary>
/// 建立備忘錄,將當前需要儲存的資訊匯入並執行個體化一個Memento對象
/// </summary>
/// <returns></returns>
public Memento CreateMemento()
{
return (new Memento((state)));
}
/// <summary>
/// 恢複備忘錄模式,將Memento匯入並將相關資料恢複
/// </summary>
/// <param name="memento"></param>
public void SetMemento(Memento memento)
{
state = memento.State;
}
/// <summary>
/// 顯示狀態
/// </summary>
public void Show()
{
Console.WriteLine("State="+state);
}

}

3.管理者類

    /// <summary>
/// 管理者類
/// </summary>
class Caretaker
{
/// <summary>
/// 得到備忘錄
/// </summary>
private Memento memento;
public Memento Memento
{
get { return memento; }
set { memento = value; }
}
}

4.用戶端調用

        /// <summary>
/// 測試備忘錄模式
/// </summary>
static void TestMemento()
{
Originator o = new Originator();
o.State = "On"; //初始狀態
o.Show();

Caretaker c = new Caretaker();
c.Memento = o.CreateMemento();//儲存狀態

o.State = "Off";//狀態改變為Off
o.Show();

o.SetMemento(c.Memento);//恢複原始狀態
o.Show();
Console.Read();

}

小結:                                                                                                          

備忘錄模式好像大部分在遊戲程式設計裡使用,來儲存遊戲狀態,怎麼把用到web程式裡呢?糾結一下

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.