当前位置:  编程技术>.net/c#/asp.net

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

    来源: 互联网  发布时间:2014-11-03

    本文导语:  本文以实例形式简单简述了C#迭代器模式的实现方法,分享给大家供大家参考。具体方法如下: 一般来说,迭代器模式的需求来自:需要对一些集合进行迭代,而迭代的方式可能有很多种。 说到迭代,动作大致包括设置第一个...

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

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

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

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

在现实场景中,迭代的方式可能有很多种,先实现一种迭代方式,实现IIterator接口。

public class IWannaIterate : IIterator
{
    private List _list;
    private int position;
    public IWannaIterate(List 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 _users;
    public MyUserManagement()
    {
      _users = new List();
      _users.Add("hello");
      _users.Add("world");
      _users.Add("nice");
    }
    public IIterator CreateIterator()
    {
      return new IWannaIterate(_users);
    }
}

假设有一个管理Book集合的类,也使用以上的IWannaIterate迭代器。

public class MyBookManagement : IManagement
{
    private List _books;
    public MyBookManagement()
    {
      _books = new List();
      _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#程序设计有所帮助。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Vectors 成员 begin():返回第一个元素的迭代器
  • Hadoop 迭代式计算框架 Guagua
  • C++ MultiMaps 成员 begin():返回指向第一个元素的迭代器
  • 可能是迭代的宏定义编译器不认
  • C++ Vectors 成员 rbegin():返回Vector尾部的逆迭代器
  • 我的客户端为单进程。会迭代生成4000个连接,但成功连到服务器上的总是不超过3973个。
  • C++ Lists(链表) 成员 rbegin():返回指向第一个元素的逆向迭代器
  • 牛顿迭代法求多项式在1.5附近的值2*x的3次幂--4x平方+3*x-6=0的实现代码
  • C++ Maps 成员 end():返回指向map末尾的迭代器
  • php递归与迭代实现快速排序
  • C++ MultiMaps 成员 end():返回一个指向multimap末尾的迭代器
  • php使用递归与迭代实现快速排序示例
  • C++ Maps 成员 rend():返回一个指向map头部的逆向迭代器
  • C语言实现二叉树遍历的迭代算法
  • C++ Maps 成员 rbegin():返回一个指向map尾部的逆向迭代器
  • C++设计模式之迭代器模式
  • C++ Vectors 成员 rend():返回Vector起始的逆迭代器
  • C++ Lists(链表) 成员 end():返回末尾的迭代器
  • C++ MultiMaps 成员 rbegin():返回一个指向mulitmap尾部的逆向迭代器
  • unix/linux知识 iis7站长之家
  • C++ Lists(链表) 成员 rend():指向list末尾的逆向迭代器


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3