迭代器模式(Iterator Pattern)
迭代器模式(Iterator Pattern)是一种对象行为模式,提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。支持在聚集中移动游标,使得访问聚合中的元素变得简单,简化了聚集的接口,封装了聚合的对象。
迭代器模式还可以应用于对树结构的访问,程序不需要从头逐行代码查找相应位置,可控制到从子集开始查找。它支持以不同的方式遍历一个集合,为遍历不同的集合结构提供一个统一的接口,迭代器简化了集合的接口,在同一个集合上可以有多个遍历。
using System; using System.Collections; using System.Collections.Generic; namespace ConsoleApplication { //一般每个接口或类都写在单独的.cs文件中 //本示例为了执行查看方便才写在一起 /// <summary> /// 自定义类 LangList实现IEnumerable接口 /// </summary> public class LangList : IEnumerable { //实现GetEnumerator接口方法 public IEnumerator GetEnumerator() { return new LangEnumrator(new string[] { "C/C++", "Java", "Python", "JavaScript" }); } } /// <summary> /// 自定义枚举器 /// </summary> public class LangEnumrator : IEnumerator { string[] _Langs; //位置索引 private int _position = -1; //枚举器构造方法 public LangEnumrator(string[] theLangs) { _Langs = new string[theLangs.Length]; for (int i = 0; i < theLangs.Length; i++) { _Langs[i] = theLangs[i]; } } //获取当前项的值 public object Current { get { if (_position < 0 || _position > _Langs.Length) { throw new Exception("超过边界了!"); } return _Langs[_position]; } } //指向下一项 public bool MoveNext() { if (_position < _Langs.Length - 1) { _position++; return true; } return false; } //复位 public void Reset() { _position = -1; } } class Program { static void Main(string[] args) { LangList Langs = new LangList(); //foreach遍历自定义的类型 foreach (var item in Langs) { Console.WriteLine(item); } Console.ReadKey(); Console.ReadKey(); } } }