程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#備忘錄形式(Memento Pattern)實例教程

C#備忘錄形式(Memento Pattern)實例教程

編輯:C#入門知識

C#備忘錄形式(Memento Pattern)實例教程。本站提示廣大學習愛好者:(C#備忘錄形式(Memento Pattern)實例教程)文章只能為提供參考,不一定能成為您想要的結果。以下是C#備忘錄形式(Memento Pattern)實例教程正文


本文以一個簡略實例講述了C#備忘錄形式(Memento Pattern)的完成辦法。分享給年夜家供年夜家參考。詳細完成辦法以下:

簡略來講,備忘錄形式就是支撐回退操作。假定讓一個Notepad支撐回退操作,若何完成呢?

起首須要一個備忘錄類。

public class Memento
{
    private string _msg;
    public Memento(string msg)
    {
      _msg = msg;
    }
    public string GetText()
    {
      return _msg;
    }
}

上述代碼重要完成:

1. 結構函數在Nodepad每次記載信息的時刻挪用,Nodepad所記載的信息終究經由過程該結構函數賦值給了_msg字段。
2. GetText辦法在Nodepad履行回退操作的時刻挪用

接上去就是Nodepad類。

public class Notepad
{
    private string _msg;
    public Memento SetMsg(string msg)
    {
      Memento m = new Memento(msg);
      _msg = msg;
      return m;
    }
     
    public string GetMsg()
    {
      return _msg;
    }
    public void Undo(Memento previousState)
    {
      if (previousState != null)
      {
        _msg = previousState.GetText();
      }
      else
      {
        _msg = "";
      }
      
    }
}

上述代碼完成:

1. 保護著一個類型為string的字段_msg,代表顯示在Nodepad上的文字
2. 記載信息辦法SetMsg:不只要把記載的信息賦值給_msg,還要把信息傳遞給備忘錄類
3. 獲得信息辦法GetMsg:讀取_msg
4. 回退操作辦法Undo:把備忘錄的上一次信息賦值給_msg。假如回退到第一次之前的操作,相當於備忘錄為null,須要斟酌為null的情形

客戶端須要有一個備忘錄的列表,保護者一切的備忘錄信息。

class Program
{
    static void Main(string[] args)
    {
      IList<Memento> undos = new List<Memento>();
      Notepad notepad = new Notepad();
      Memento undo;
      undo = notepad.SetMsg("Hello");
      undos.Add(undo);
      undo = notepad.SetMsg("World");
      undos.Add(undo);
      Console.WriteLine("進入Nodepad檢查信息");
      Console.WriteLine(notepad.GetMsg());
      Console.WriteLine("1、接著履行一個回退操作");
      notepad.Undo(undos[0]);
      Console.WriteLine("回退操作今後檢查信息");
      Console.WriteLine(notepad.GetMsg());
      Console.WriteLine("2、再履行一個回退操作");
      notepad.Undo(null);
      Console.WriteLine("回退操作今後再檢查信息");
      Console.WriteLine(notepad.GetMsg());
      Console.ReadKey();
    }
}

運轉成果以下圖所示:

經由過程上述運轉成果可見:
1. 第一次進入Notepad檢查信息看到的是最初一次輸出的World;
2. 回退一次,第二次進入Notepad檢查信息看到的是第一次輸出的Hello;
3. 再回退一次,第三次進入Notepad檢查信息看到的是空字符串。

信任本文所述對年夜家C#法式設計的進修有必定的自創價值。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved