本文共 2392 字,大约阅读时间需要 7 分钟。
五个角色:迭代器(Iterator)、具体迭代器(ConcreteIterator)、聚合(Aggregate)、具体聚合(ConcreteAggregate)、客户端(Client)
迭代器(Iterator):定义遍历和访问元素的接口
具体迭代器(ConcreteIterator):实现迭代器接口并且跟踪聚合对象当前位置
聚合(Aggregate):定义一个迭代器对象接口
具体聚合(ConcreteAggregate):实现迭代器对象,并且返回具体迭代器实例
客户端(Client):调用迭代器对聚合对象进行遍历
实现思路:向具体聚合对象添加元素,然后调用迭代器遍历聚合对象
类图:
应用场景:需要遍历新闻名称。
分析:首先建立一个聚合对象,然后在聚合对象中添加新闻的List,编写迭代器对新闻进行遍历即可。
下面我们在控制台程序去演示一下如何使用Iterator Pattern:
一、迭代器(Iterator):
//迭代器(Iterator) abstract class Iterator { public abstract News First(); public abstract News Next(); public abstract bool IsOver(); public abstract News Current(); }
二、具体迭代器(ConcreteIterator):
//具体迭代器(ConcreteIterator) class ConcreteIterator:Iterator { public ConcreteCollect concretecollect; int current = 0; public ConcreteIterator(ConcreteCollect collect) { concretecollect = collect; } public override News First() { return concretecollect[1]; } public override News Next() { current++; return current >= concretecollect.Count ? null : concretecollect[current]; } public override bool IsOver() { return current >= concretecollect.Count ? true : false; } public override News Current() { return concretecollect[current]; } }
三、聚合(Aggregate):
//聚合(Aggregate) abstract class Collect { public abstract Iterator CreateIterator(); }
四、具体聚合(ConcreteAggregate):
//具体聚合(ConcreteAggregate) class ConcreteCollect : Collect { private ListcollectList = new List (); public override Iterator CreateIterator() { return new ConcreteIterator(this); } public News this[int index] { get { return collectList[index]; } set { collectList.Insert(index,value); } } public int Count { get { return collectList.Count; } } }
五、客户端(Client):
class Program { static void Main(string[] args) { ConcreteCollect collect = new ConcreteCollect(); collect[0] = new News("今天的第一个新闻"); collect[1] = new News("今天的第二个新闻"); collect[2] = new News("今天的第三个新闻"); collect[3] = new News("今天的第四个新闻"); collect[4] = new News("今天的第五个新闻"); Iterator iterator = new ConcreteIterator(collect); while (!iterator.IsOver()) { Console.WriteLine("这是:" + iterator.Current().Name); iterator.Next(); } Console.ReadLine(); } }
元素:
class News { public News(string name) { this.Name = name; } public string Name{ get;set;} }
如需源码请点击 下载。
本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/10/18/2213110.html,如需转载请自行联系原作者