23种设计模式-16-迭代器模式

mac2026-08-15  5

/// <summary> /// 迭代器接口 /// </summary> public interface ITerator { bool MoveNext(); object GetCurrent(); void Next(); void Reset(); } /// <summary> /// 数据容器接口 /// </summary> public interface IDataContainer { /// <summary> /// 获取迭代器 /// </summary> /// <returns></returns> ITerator GetIterator(); } /// <summary> /// 数据对象 /// </summary> public class Data : IDataContainer { /// <summary> /// 数据实体 /// </summary> private int[] _Data; public Data(int[] data) { this._Data = data; } /// <summary> /// 集合长度 /// </summary> public int Length { get { return this._Data.Length; } } /// <summary> /// 根据索引获取值 /// </summary> /// <param name="index"></param> /// <returns></returns> public int GetValue(int index) { return this._Data[index]; } /// <summary> /// 获取迭代器 /// </summary> /// <returns></returns> public ITerator GetIterator() { return new DataIterator(this); } } /// <summary> /// 迭代器 /// </summary> public class DataIterator : ITerator { /// <summary> /// 数据实体 /// </summary> private Data _Data; /// <summary> /// 当前索引值 /// </summary> private int _Index; public DataIterator(Data data) { this._Data = data; this._Index = 0; } /// <summary> /// 是否可以继续向下迭代 /// </summary> /// <returns></returns> public bool MoveNext() { return this._Index < this._Data.Length; } /// <summary> /// 获取当前值 /// </summary> /// <returns></returns> public object GetCurrent() { return this._Data.GetValue(this._Index); } /// <summary> /// 下一个索引 /// </summary> public void Next() { this._Index++; } /// <summary> /// 重置索引 /// </summary> public void Reset() { this._Index = 0; } } class Program { /// <summary> /// 迭代器模式: /// 顾名思义,迭代器模式就是可以对一个集合进行迭代循环遍历 /// 所以一个集合可以循环遍历,肯定是有两部分构成:1.集合本身;2.迭代器对象; /// /// 根据设计模式六大原则的单一职责: /// 我们应该将集合和迭代器这两部分解耦分离开 /// 所以此时我们需要定义两个接口:1.集合本身;2.迭代器; /// 然后每个对象都要有具体的实现,这样子就应该有4个对象 /// </summary> /// <param name="args"></param> static void Main(string[] args) { //初始化数据对象 Data data = new Data(new int[] { 1, 9, 6, 2, 8, 33, 44, 66, 88, 65, 2123, 78, 9 }); //获取到数据对象的迭代器 ITerator iterator = data.GetIterator(); //遍历输出数据值 while (iterator.MoveNext()) { var value = iterator.GetCurrent(); Console.WriteLine(value.ToString()); iterator.Next(); } Console.WriteLine("End"); Console.ReadKey(); } }

 

最新回复(0)