C#备忘录模式(Memento Pattern)实例教程

时间:2021-05-20

本文以一个简单实例讲述了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#程序设计的学习有一定的借鉴价值。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章