欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-20 13:15:40
本文以一个简单实例讲述了c#备忘录模式(memento pattern)的实现方法。分享给大家供大家参考。具体实现方法如下: 简单来说,备忘录模式就是支持回退操作。假设让...

本文以一个简单实例讲述了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();
    }
}

运行结果如下图所示:

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

通过上述运行结果可见:
1. 第一次进入notepad查看信息看到的是最后一次输入的world;
2. 回退一次,第二次进入notepad查看信息看到的是第一次输入的hello;
3. 再回退一次,第三次进入notepad查看信息看到的是空字符串。

相信本文所述对大家c#程序设计的学习有一定的借鉴价值。

上一篇:

下一篇: