欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-16 23:11:40
本文以实例形式简单简述了c#迭代器模式的实现方法,分享给大家供大家参考。具体方法如下: 一般来说,迭代器模式的需求来自:需要对一些集合进行迭代,而迭代的方式可能有很多种。...

本文以实例形式简单简述了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#迭代器模式(Iterator Pattern)实例教程

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

上一篇:

下一篇: