首页 > 代码库 > 迭代器(Iterator)模式
迭代器(Iterator)模式
/*
*迭代器(Iterator)模式:提供货一种方法顺序反问一个聚合对象中的各个元素。
*/
ConcreteAggregate a = new ConcreteAggregate(); a[0] = "A"; a[1] = "B"; a[2] = "C"; a[3] = "D"; Iterator i = new ConcreteIterator(a); object item = i.First(); while (!i.IsDone()) { Console.WriteLine("{0} 请买车票! ", i.CurrentItem()); i.Next(); } Console.ReadLine(); /// <summary> /// 迭代器(Iterator) 抽象类 /// </summary> abstract class Iterator { public abstract object First(); public abstract object Next(); public abstract bool IsDone(); public abstract object CurrentItem(); } /// <summary> /// Aggregate 集聚抽象类 /// </summary> abstract class Aggregate { public abstract Iterator CreateIterator(); } /// <summary> /// ConcreteIterator 具体迭代器 /// </summary> class ConcreteIterator : Iterator { //创建一个具体集聚类对象 private ConcreteAggregate aggregate; private int current = 0; //初始化具体集聚类传入对象 public ConcreteIterator(ConcreteAggregate aggregate) { this.aggregate = aggregate; } public override object First() { return aggregate[0]; } public override object Next() { object ret = null; current++; if (current < aggregate.Count) ret = aggregate[current]; return ret; } public override bool IsDone() { return current >= aggregate.Count ? true : false; } public override object CurrentItem() { return aggregate[current]; } } /// <summary> /// 具体 集聚类 /// </summary> class ConcreteAggregate : Aggregate { private IList<object> items = new List<object>(); public override Iterator CreateIterator() { return new ConcreteIterator(this); } public int Count { get { return items.Count; } } //索引 public object this[int index] { get { return items[index]; } set { items.Insert(index, value); } } }
在.net中IEumerator 已经为你准备好了接口,你只要去实现它就好。
其实就一个 foreach 循环的底层方法。 封装后就是foreach 遍历集合
public interface IEumerator { object Current { get; } bool MoveNext(); void Reset(); } public interface IEnumerable { IEumerator GetEnumerator(); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。