最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

首先需要一個(gè)備忘錄類(lèi)。

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

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

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

接下來(lái)就是Nodepad類(lèi)。

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 = "";
      }
      
    }
}

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

1. 維護(hù)著一個(gè)類(lèi)型為string的字段_msg,代表顯示在Nodepad上的文字
2. 記錄信息方法SetMsg:不僅要把記錄的信息賦值給_msg,還要把信息傳遞給備忘錄類(lèi)
3. 獲取信息方法GetMsg:讀取_msg
4. 回退操作方法Undo:把備忘錄的上一次信息賦值給_msg。如果回退到第一次以前的操作,相當(dāng)于備忘錄為null,需要考慮為null的情況

客戶(hù)端需要有一個(gè)備忘錄的列表,維護(hù)者所有的備忘錄信息。

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

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

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

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

相關(guān)文章

  • C#刪除Word文檔中的段落的方法示例

    C#刪除Word文檔中的段落的方法示例

    在編輯Word文檔時(shí),我們有時(shí)需要調(diào)整段落的布局、刪除不必要的段落以?xún)?yōu)化文檔的結(jié)構(gòu)和閱讀體驗(yàn),本文將通過(guò)以下3個(gè)簡(jiǎn)單示例演示如何使用免費(fèi).NET庫(kù)刪除Word文檔中的段落 ,需要的朋友可以參考下
    2024-09-09
  • C# Winform使用擴(kuò)展方法實(shí)現(xiàn)自定義富文本框(RichTextBox)字體顏色

    C# Winform使用擴(kuò)展方法實(shí)現(xiàn)自定義富文本框(RichTextBox)字體顏色

    這篇文章主要介紹了C# Winform使用擴(kuò)展方法實(shí)現(xiàn)自定義富文本框(RichTextBox)字體顏色,通過(guò).NET的靜態(tài)擴(kuò)展方法來(lái)改變RichTextBox字體顏色,需要的朋友可以參考下
    2015-06-06
  • DataGridView不顯示最下面的新行、判斷新增行、刪除行操作

    DataGridView不顯示最下面的新行、判斷新增行、刪除行操作

    這篇文章介紹了DataGridView不顯示最下面的新行、判斷新增行、刪除行的操作方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • C#利用雪花算法實(shí)現(xiàn)生成ID工具類(lèi)

    C#利用雪花算法實(shí)現(xiàn)生成ID工具類(lèi)

    雪花算法表示生成的ID如雪花般獨(dú)一無(wú)二,該算法源自Twitter,主要用于解決分布式系統(tǒng)的唯一Id生成問(wèn)題,本文主要介紹了C#如何利用利用雪花算法實(shí)現(xiàn)生成ID,需要的可以參考下
    2023-12-12
  • 輕松學(xué)習(xí)C#的String類(lèi)

    輕松學(xué)習(xí)C#的String類(lèi)

    輕松學(xué)習(xí)C#的String類(lèi),小編也是第一次接觸C#的String類(lèi),感興趣的小伙伴們可以參考一下,大家一起學(xué)習(xí)
    2015-11-11
  • C#實(shí)現(xiàn)控制電腦注銷(xiāo),關(guān)機(jī)和重啟

    C#實(shí)現(xiàn)控制電腦注銷(xiāo),關(guān)機(jī)和重啟

    這篇文章主要為大家介紹了C#如何實(shí)現(xiàn)控制電腦注銷(xiāo),關(guān)機(jī)和重啟功能,本案例涉及的知識(shí)點(diǎn)包含:Process、Shell32.dll、User32.dll、Struct數(shù)據(jù)結(jié)構(gòu),感興趣的可以了解一下
    2022-09-09
  • 解決Unity項(xiàng)目中UI腳本丟失的問(wèn)題

    解決Unity項(xiàng)目中UI腳本丟失的問(wèn)題

    這篇文章主要介紹了解決Unity項(xiàng)目中UI腳本丟失的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • C#線(xiàn)程倒計(jì)時(shí)器源碼分享

    C#線(xiàn)程倒計(jì)時(shí)器源碼分享

    這篇文章主要為大家分享了C#線(xiàn)程倒計(jì)時(shí)器源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Unity3D實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲(2)

    Unity3D實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲(2)

    這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲的第二部分,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C#數(shù)組應(yīng)用分析

    C#數(shù)組應(yīng)用分析

    C#數(shù)組應(yīng)用分析...
    2007-08-08

最新評(píng)論

凉城县| 红原县| 通河县| 尖扎县| 项城市| 海丰县| 荃湾区| 屏东市| 大关县| 潮州市| 忻州市| 永登县| 德钦县| 许昌市| 肇庆市| 琼中| 聂拉木县| 会宁县| 博罗县| 永善县| 和顺县| 平原县| 榆中县| 永仁县| 大洼县| 云霄县| 政和县| 隆回县| 名山县| 会东县| 山阳县| 海南省| 齐河县| 石屏县| 自治县| 通海县| 应城市| 天峨县| 盈江县| 芜湖市| 道真|