国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

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

2020-01-24 02:25:13
字體:
供稿:網(wǎng)友

本文以一個簡單實例講述了C#備忘錄模式(Memento Pattern)的實現(xiàn)方法。分享給大家供大家參考。具體實現(xiàn)方法如下:

簡單來說,備忘錄模式就是支持回退操作。假設(shè)讓一個Notepad支持回退操作,如何實現(xiàn)呢?

首先需要一個備忘錄類。

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

上述代碼主要實現(xiàn):

1. 構(gòu)造函數(shù)在Nodepad每次記錄信息的時候調(diào)用,Nodepad所記錄的信息最終通過該構(gòu)造函數(shù)賦值給了_msg字段。
2. GetText方法在Nodepad執(zhí)行回退操作的時候調(diào)用

接下來就是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 = "";      }          }}

上述代碼實現(xiàn):

1. 維護(hù)著一個類型為string的字段_msg,代表顯示在Nodepad上的文字
2. 記錄信息方法SetMsg:不僅要把記錄的信息賦值給_msg,還要把信息傳遞給備忘錄類
3. 獲取信息方法GetMsg:讀取_msg
4. 回退操作方法Undo:把備忘錄的上一次信息賦值給_msg。如果回退到第一次以前的操作,相當(dāng)于備忘錄為null,需要考慮為null的情況

客戶端需要有一個備忘錄的列表,維護(hù)者所有的備忘錄信息。

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("進(jìn)入Nodepad查看信息");      Console.WriteLine(notepad.GetMsg());      Console.WriteLine("1、接著執(zhí)行一個回退操作");      notepad.Undo(undos[0]);      Console.WriteLine("回退操作以后查看信息");      Console.WriteLine(notepad.GetMsg());      Console.WriteLine("2、再執(zhí)行一個回退操作");      notepad.Undo(null);      Console.WriteLine("回退操作以后再查看信息");      Console.WriteLine(notepad.GetMsg());      Console.ReadKey();    }}

運行結(jié)果如下圖所示:

通過上述運行結(jié)果可見:
1. 第一次進(jìn)入Notepad查看信息看到的是最后一次輸入的World;
2. 回退一次,第二次進(jìn)入Notepad查看信息看到的是第一次輸入的Hello;
3. 再回退一次,第三次進(jìn)入Notepad查看信息看到的是空字符串。

相信本文所述對大家C#程序設(shè)計的學(xué)習(xí)有一定的借鑒價值。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 临武县| 磐安县| 佳木斯市| 宣威市| 宣化县| 甘德县| 仁化县| 恭城| 崇左市| 共和县| 西畴县| 盖州市| 灌南县| 辽阳县| 望谟县| 武宣县| 乌鲁木齐县| 精河县| 进贤县| 军事| 桐柏县| 望都县| 资溪县| 长沙县| 墨江| 蓬莱市| 天峨县| 互助| 衡水市| 启东市| 新丰县| 兴城市| 武清区| 东乡族自治县| 绩溪县| 英吉沙县| 鹤岗市| 六安市| 江川县| 海城市| 北安市|