首页 > 编程 > C# > 正文

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

2020-01-24 02:25:29
字体:
来源:转载
供稿:网友

本文以实例形式简单简述了C#迭代器模式的实现方法,分享给大家供大家参考。具体方法如下:

一般来说,迭代器模式的需求来自:需要对一些集合进行迭代,而迭代的方式可能有很多种。

说到迭代,动作大致包括设置第一个位置,获取下一个位置元素,判断是否迭代结束,获取当前位置元素,大致就这么些。把这些迭代动作封装到一个接口中。

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

在现实场景中,迭代的方式可能有很多种,先实现一种迭代方式,实现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类内部维护这一个集合,而这个集合是通过构造函数赋值的,否则的话,迭代器就没活干了。 

好了,迭代器,迭代的具体方式有了,迭代器给谁用呢?

只要一个类维护着集合,就可能用到以上实现IIterator接口的某种具体迭代器。所有需要迭代器的类都有一个共同的动作,就是创建一个迭代器。先把创建迭代器的动作抽象成接口。

public interface IManagement{    IIterator CreateIterator();}

假设有一个管理用户集合的类,使用以上的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);    }}

假设有一个管理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创建各自的迭代器,然后使用迭代器把集合的所有元素打印出来。

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());      }    }}

运行结果如下图所示:

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表