当前位置: 首页 > 编程笔记 >

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

方苗宣
2023-03-14
本文向大家介绍C#迭代器模式(Iterator Pattern)实例教程,包括了C#迭代器模式(Iterator Pattern)实例教程的使用技巧和注意事项,需要的朋友参考一下

本文以实例形式简单简述了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#装饰器模式(Decorator Pattern)实例教程,包括了C#装饰器模式(Decorator Pattern)实例教程的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式详细讲述了C#装饰器模式的实现方法。分享给大家供大家参考。具体实现方法如下: 现假设有一个公司要做产品套餐,即把不同的产品组合在一起,不同的组合对应不同的价格。最终呈现出来的效果是:把产品组合的所有元素

  • 主要内容:介绍,实现,Iterator.java,Container.java,NameRepository.java,IteratorPatternDemo.java迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。 介绍 意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。 主要解决:不同的方式来遍历整个整合对象。

  • 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。 介绍 意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。 主要解决:不同的方式来遍历整个整合对象。 何时使用:遍历一个聚合对象。 如何解决:把在元素之间游走的责任交给迭

  • 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。 介绍 意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。 主要解决:不同的方式来遍历整个整合对象。 何时使用:遍历一个聚合对象。 如何解决:把在元素之间游走的责任交给迭

  • 迭代器模式中,迭代器(允许我们遍历集合中所有元素的对象)顺序迭代一个集合对象中的元素而无需暴漏其底层形式。 迭代器封装了这种特别的迭代操作的内部结构,就jQuery的jQuery.fn.each()迭代器来说,我们实际上可以使用jQuery.each()底层的代码来迭代一个集合,而无需知道或者理解后台提供这种功能的代码是如何实现的。 这种模式可以被理解为门面模式的一种特例,在这里我们只处理与迭代有