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

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

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

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

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

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

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

在現(xiàn)實(shí)場(chǎng)景中,迭代的方式可能有很多種,先實(shí)現(xiàn)一種迭代方式,實(shí)現(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è)集合,而這個(gè)集合是通過構(gòu)造函數(shù)賦值的,否則的話,迭代器就沒活干了。 

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

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

public interface IManagement
{
    IIterator CreateIterator();
}

假設(shè)有一個(gè)管理用戶集合的類,使用以上的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è)有一個(gè)管理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());
      }
    }
}

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

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

相關(guān)文章

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

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

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

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

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

    C#生成漂亮驗(yàn)證碼完整代碼類

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

    C#代碼設(shè)置開機(jī)啟動(dòng)示例

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