五个角色:迭代器(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 List<News> collectList = new List<News>();
- 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;}
- }
如需源码请点击 IteratorPattern.rar 下载。
本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/827026