欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#備忘錄模式(Memento Pattern)實例教程

 更新時間:2014年09月12日 16:58:32   投稿:shichen2014  
這篇文章主要介紹了C#備忘錄模式(Memento Pattern),以一個支持回退操作的例子講述了C#備忘模式的實現(xiàn)方法,需要的朋友可以參考下

本文以一個簡單實例講述了C#備忘錄模式(Memento Pattern)的實現(xiàn)方法。分享給大家供大家參考。具體實現(xiàn)方法如下:

簡單來說,備忘錄模式就是支持回退操作。假設(shè)讓一個Notepad支持回退操作,如何實現(xiàn)呢?

首先需要一個備忘錄類。

public class Memento
{
    private string _msg;
    public Memento(string msg)
    {
      _msg = msg;
    }
    public string GetText()
    {
      return _msg;
    }
}

上述代碼主要實現(xiàn):

1. 構(gòu)造函數(shù)在Nodepad每次記錄信息的時候調(diào)用,Nodepad所記錄的信息最終通過該構(gòu)造函數(shù)賦值給了_msg字段。
2. GetText方法在Nodepad執(zhí)行回退操作的時候調(diào)用

接下來就是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 = "";
      }
      
    }
}

上述代碼實現(xiàn):

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、接著執(zhí)行一個回退操作");
      notepad.Undo(undos[0]);
      Console.WriteLine("回退操作以后查看信息");
      Console.WriteLine(notepad.GetMsg());
      Console.WriteLine("2、再執(zhí)行一個回退操作");
      notepad.Undo(null);
      Console.WriteLine("回退操作以后再查看信息");
      Console.WriteLine(notepad.GetMsg());
      Console.ReadKey();
    }
}

運行結(jié)果如下圖所示:

通過上述運行結(jié)果可見:
1. 第一次進入Notepad查看信息看到的是最后一次輸入的World;
2. 回退一次,第二次進入Notepad查看信息看到的是第一次輸入的Hello;
3. 再回退一次,第三次進入Notepad查看信息看到的是空字符串。

相信本文所述對大家C#程序設(shè)計的學(xué)習(xí)有一定的借鑒價值。

相關(guān)文章

  • 在C#程序中對MessageBox進行定位的方法

    在C#程序中對MessageBox進行定位的方法

    這篇文章主要介紹了在C#程序中對MessageBox進行定位的方法,針對圖形化界面進行調(diào)試,需要的朋友可以參考下
    2015-07-07
  • C#修改IIS站點framework版本號的方法

    C#修改IIS站點framework版本號的方法

    這篇文章主要介紹了C#修改IIS站點framework版本號的方法,涉及C#調(diào)用使用ASP.NET IIS注冊工具Aspnet_regiis.exe進行IIS站點framework版本號修改的方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • C#在 .NET中使用依賴注入的示例詳解

    C#在 .NET中使用依賴注入的示例詳解

    這篇文章主要為大家詳細介紹了C#如何在 .NET中使用依賴注入,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起了解一下
    2024-01-01
  • unity實現(xiàn)翻頁效果

    unity實現(xiàn)翻頁效果

    這篇文章主要為大家詳細介紹了unity實現(xiàn)翻頁效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • C#簡單多線程同步和優(yōu)先權(quán)用法實例

    C#簡單多線程同步和優(yōu)先權(quán)用法實例

    這篇文章主要介紹了C#簡單多線程同步和優(yōu)先權(quán)用法實例,對于C#線程的阻塞、同步、異步、互斥等概念做了較為深入的分析與實例講解,需要的朋友可以參考下
    2014-09-09
  • C#使用NAudio實現(xiàn)監(jiān)聽系統(tǒng)聲音

    C#使用NAudio實現(xiàn)監(jiān)聽系統(tǒng)聲音

    這篇文章主要為大家詳細介紹了C#如何使用NAudio實現(xiàn)監(jiān)聽系統(tǒng)聲音并屏蔽麥克風(fēng)其他聲音,文中的示例代碼講解詳細,有需要的小伙伴可以參考下
    2024-02-02
  • C#開發(fā)WinForm清空DataGridView控件綁定的數(shù)據(jù)

    C#開發(fā)WinForm清空DataGridView控件綁定的數(shù)據(jù)

    本文詳細講解了C#開發(fā)WinForm清空DataGridView控件綁定數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • c# 實現(xiàn)RSA非對稱加密算法

    c# 實現(xiàn)RSA非對稱加密算法

    RSA解決了對稱加密的一個不足,比如AES算法加密和解密時使用的是同一個秘鑰,因此這個秘鑰不能公開,因此對于需要公開秘鑰的場合,我們需要在加密和解密過程中使用不同的秘鑰,加密使用的公鑰可以公開,解密使用的私鑰要保密,這就是非對稱加密的好處?!?/div> 2021-06-06
  • 解析C#拼接Json串的幾種方法

    解析C#拼接Json串的幾種方法

    本文主要介紹了C#拼接Json串的幾種方法,主要包括了4種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 使用c#在word文檔中創(chuàng)建表格的方法詳解

    使用c#在word文檔中創(chuàng)建表格的方法詳解

    本篇文章是對使用c#在word文檔中創(chuàng)建表格的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論