亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#迭代器模式(Iterator Pattern)實例教程

 更新時間:2014年09月12日 15:34:06   投稿:shichen2014  
這篇文章主要介紹了C#迭代器模式(Iterator Pattern),包括了迭代器的適用范圍及用法實例,需要的朋友可以參考下

本文以實例形式簡單簡述了C#迭代器模式的實現(xiàn)方法,分享給大家供大家參考。具體方法如下:

一般來說,迭代器模式的需求來自:需要對一些集合進(jìn)行迭代,而迭代的方式可能有很多種。

說到迭代,動作大致包括設(shè)置第一個位置,獲取下一個位置元素,判斷是否迭代結(jié)束,獲取當(dāng)前位置元素,大致就這么些。把這些迭代動作封裝到一個接口中。

public interface IIterator
{
    void First();
    string Next();
    bool IsDone();
    string Current();
}

在現(xiàn)實場景中,迭代的方式可能有很多種,先實現(xiàn)一種迭代方式,實現(xiàn)IIterator接口。

public class IWannaIterate : IIterator
{
    private List<string> _list;
    private int position;
    public IWannaIterate(List<string> list)
    {
      Console.WriteLine("我要感謝IIterator,有了它我才可以迭代");
      _list = list;
      position = 0;
    }
    public void First()
    {
      position = 0;
    }
    public string Next()
    {
      return _list[position++];
    }
    public bool IsDone()
    {
      return position >= _list.Count;
    }
    public string Current()
    {
      return _list[position];
    }
}

以上,迭代器IWannaIterate類內(nèi)部維護(hù)這一個集合,而這個集合是通過構(gòu)造函數(shù)賦值的,否則的話,迭代器就沒活干了。 

好了,迭代器,迭代的具體方式有了,迭代器給誰用呢?

只要一個類維護(hù)著集合,就可能用到以上實現(xiàn)IIterator接口的某種具體迭代器。所有需要迭代器的類都有一個共同的動作,就是創(chuàng)建一個迭代器。先把創(chuàng)建迭代器的動作抽象成接口。

public interface IManagement
{
    IIterator CreateIterator();
}

假設(shè)有一個管理用戶集合的類,使用以上的IWannaIterate迭代器。

public class MyUserManagement : IManagement
{
    private List<string> _users;
    public MyUserManagement()
    {
      _users = new List<string>();
      _users.Add("hello");
      _users.Add("world");
      _users.Add("nice");
    }
    public IIterator CreateIterator()
    {
      return new IWannaIterate(_users);
    }
}

假設(shè)有一個管理Book集合的類,也使用以上的IWannaIterate迭代器。

public class MyBookManagement : IManagement
{
    private List<string> _books;
    public MyBookManagement()
    {
      _books = new List<string>();
      _books.Add("美麗世界");
      _books.Add("你好嗎");
    }
    public IIterator CreateIterator()
    {
      return new IWannaIterate(_books);
    }
}

客戶端讓MyUserManagement和MyBookManagement創(chuàng)建各自的迭代器,然后使用迭代器把集合的所有元素打印出來。

class Program
{
    static void Main(string[] args)
    {
      IManagement magageA = new MyUserManagement();
      IManagement manageB = new MyBookManagement();
      IIterator iteratorA = magageA.CreateIterator();
      IIterator iteratorB = manageB.CreateIterator();
      Console.WriteLine("打印出的user列表");
      PrintList(iteratorA);
      Console.WriteLine();
      Console.WriteLine("打印出book列表");
      PrintList(iteratorB);
      Console.ReadKey();
    }
    private static void PrintList(IIterator iterator)
    {
      while (!iterator.IsDone())
      {
        Console.WriteLine(iterator.Next());
      }
    }
}

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

希望本文所述對大家的C#程序設(shè)計有所幫助。

相關(guān)文章

  • C# WinForm編程獲取文件物理路徑的方法

    C# WinForm編程獲取文件物理路徑的方法

    這篇文章主要介紹了C# inForm編程獲取文件物理路徑的方法,獲取的物理路徑是軟件即軟件安裝所在目錄,需要的朋友可以參考下
    2014-08-08
  • C#圖像對比度調(diào)整的方法

    C#圖像對比度調(diào)整的方法

    這篇文章主要介紹了C#圖像對比度調(diào)整的方法,涉及C#實現(xiàn)圖像對比度操作的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C#生成漂亮驗證碼完整代碼類

    C#生成漂亮驗證碼完整代碼類

    本文主要介紹了C#生成漂亮驗證碼的完整代碼類。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • C#代碼設(shè)置開機啟動示例

    C#代碼設(shè)置開機啟動示例

    本文介紹了使用C#代碼設(shè)置開機啟動的方法,原理就是在注冊表啟動項里添加一項
    2014-01-01
  • 最新評論