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

 更新时间:2014年09月12日 16:58:32   投稿:shichen2014  
这篇文章主要介绍了C#备忘录模式(Memento Pattern),以一个支持回退操作的例子讲述了C#备忘模式的实现方法,需要的朋友可以参考下

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

相关文章

  • 深入分析c# 继承

    深入分析c# 继承

    这篇文章主要介绍了c# 继承的相关资料,文中讲解的非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • C#中的Image控件用法详解与实际应用示例

    C#中的Image控件用法详解与实际应用示例

    在C#应用程序开发中,图像显示是一个常见的需求,无论是创建图形界面还是处理图像数据,System.Windows.Controls.Image控件都是实现这一目标的重要工具,本文将详细介绍Image控件的功能、用法、优化技巧以及一些实际应用示例,需要的朋友可以参考下
    2024-06-06
  • C#利用RabbitMQ实现点对点消息传输

    C#利用RabbitMQ实现点对点消息传输

    RabbitMQ做为消息代理,负责接收和转发消息,可以将RabbitMQ比喻为一个邮筒、一个邮局和一个邮递员。本文主要以一个简单的小例子,简述RabbitMQ实现消息传输的相关内容,仅供学习分享使用,如有不足之处,还请指正。
    2021-05-05
  • C# Distinct和重写IEqualityComparer时要知道的二三事

    C# Distinct和重写IEqualityComparer时要知道的二三事

    这篇文章主要给大家介绍了关于C# Distinct和重写IEqualityComparer时要知道的二三事,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • C#实现智能AI五子棋游戏详解

    C#实现智能AI五子棋游戏详解

    这篇文章主要为大家详细介绍了如何通过C#实现智能AI五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-11-11
  • C#中WPF使用多线程调用窗体组件的方法

    C#中WPF使用多线程调用窗体组件的方法

    这篇文章主要介绍了C#中WPF使用多线程调用窗体组件的方法,涉及C#中多线程的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • Unity制作图片字体的方法

    Unity制作图片字体的方法

    这篇文章主要为大家详细介绍了Unity制作图片字体的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 详解C#开发Android应用程序的流程

    详解C#开发Android应用程序的流程

    在本篇文章里小编给大家分享了关于C#开发Android应用程序的流程和相关技巧,需要的朋友们跟着学习下。
    2019-03-03
  • Unity实现卡片循环滚动效果的示例详解

    Unity实现卡片循环滚动效果的示例详解

    这篇文章主要为大家详细介绍了如何利用Unity实现卡片循环滚动的效果,文中的实现步骤讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2022-12-12
  • C#使用有道ip地址查询接口方法实例详解

    C#使用有道ip地址查询接口方法实例详解

    这篇文章主要介绍了C#使用有道ip地址查询接口方法,实例分析了有道IP地址查询接口的使用方法与数据返回格式,需要的朋友可以参考下
    2015-05-05

最新评论