用最简单的例子理解备忘录模式(Memento Pattern)
2014-09-09 23:14
274 查看
简单来说,备忘录模式就是支持回退操作。假设让一个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查看信息看到的是空字符串。
相关文章推荐
- 极速理解设计模式系列:19.备忘录模式(Memento Pattern)
- 简单易于理解的C#事件代理例子
- .NET开发基础:从简单的例子理解泛型 分享
- 用一个简单的例子来理解python高阶函数
- 简单例子理解数据库事务
- JSP-一个理解MVC架构的简单的登陆、注册例子
- 数据库模型设计,第一范式、第二范式、第三范式简单例子理解
- 【jena】对Jena的简单理解和一个例子
- 设计模式(2)结合代码和例子来理解简单工厂模式
- 简单例子让你很好的理解:协议与委托 (Protocol and Delegate)
- 对Jena的简单理解和一个例子(上)
- 一个简单的排序例子理解闭包作为参数
- Asp中通过简单的例子理解下ByVal和ByRef的用法
- 一个简单的例子理解C++ map, 运用map统计单词出现的次数
- 从简单的例子理解委托
- 理解面向对象编程的简单例子
- 对Jena的简单理解和一个例子(下)
- 极速理解设计模式系列:19.备忘录模式(Memento Pattern) 推荐
- 我所理解的设计模式(C++实现)——备忘录模式(Memento Pattern)
- 一个简单的例子理解C++ map, 运用map统计单词出现的次数