本文以一個簡單實例講述了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#程序設計的學習有一定的借鑒價值。
新聞熱點
疑難解答