首页 > 代码库 > 用最简单的例子理解备忘录模式(Memento Pattern)
用最简单的例子理解备忘录模式(Memento Pattern)
简单来说,备忘录模式就是支持回退操作。假设让一个Notepad支持回退操作,如何实现呢?
首先需要一个备忘录类。
public class Memento{private string _msg;public Memento(string msg){_msg = msg;}public string GetText(){return _msg;
}}
以上,
○ 构造函数在Nodepad每次记录信息的时候调用,Nodepad所记录的信息最终通过该构造函数赋值给了_msg字段。
○ 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 = "";}}}
○ 维护着一个类型为string的字段_msg,代表显示在Nodepad上的文字
○ 记录信息方法SetMsg:不仅要把记录的信息赋值给_msg,还要把信息传递给备忘录类
○ 获取信息方法GetMsg:读取_msg
○ 回退操作方法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();}}
○ 第一次进入Notepad查看信息看到的是最后一次输入的World;
○ 回退一次,第二次进入Notepad查看信息看到的是第一次输入的Hello;
○ 再回退一次,第三次进入Notepad查看信息看到的是空字符串。
用最简单的例子理解备忘录模式(Memento Pattern)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。