迭代器模式
迭代器用于对一个聚合对象进行遍历,聚合对象只负责存储数据,而遍历数据由迭代器来完成,更符合单一职责原则的要求。
存储多个成员对象(元素)被称为聚合类(Aggregate Classes),对应对象为聚合对象。
迭代器模式:提供一种方法顺序访问同一个聚合对象中各个元素,且不用暴露该对象的内部表示。
迭代器模式有4种角色:
1.Iterator(r抽象迭代器):它定义了访问和遍历元素的接口吗,声明了用于遍历数据元素的方法。如:获取第一元素的First()方法,访问下一个元素的Next()方法,判断是否还有下一个元素的HasNext()方法,用于获取当前元素的CurrentItem()方法等。
2.ConcreteIterator(具体迭代器):它实现了抽象迭代器的接口,完成对聚合对象的遍历,同时在具体迭代器中通过游标来记录在聚合对象中所处的当前位置。
3.Aggregate(抽象聚合类):它用于存储和管理元素对象,声明一个CreateIterator()方法用于创建一个迭代器对象,充当抽象迭代器工厂角色。
4.ConcreteAggregate(具体聚合类):它是抽象聚合类的子类,实现了在抽象聚合类中声明的CreateIterator()方法,该方法返回一个与该具体聚合类对应的具体迭代器ConcreteIterator实例。
抽象迭代器类:
interface Iterator
{
void First(); //将游标指向第一个元素
void Next(); //将游标指向下一个元素
bool HasNext(); //判断是否存在下一个元素
object CurrentItem(); //获取游标指向的当前元素
}
class ConcreteIterator:Iterator
{
private ConcreteAggregate objects; //维持一个对具体聚合对象的引用,以便访问存储在聚合对象中数据
private int cursor; //定义一个游标,用于记录当前访问位置。
public ConcreteIterator(ConcreteAggregate objects)
{
this.objects = objects;
}
public void First(){}
public void Next(){}
public void HasNext(){}
public object CurrentItem(){//实现代码}
}
聚合类(用于存储并负责创建迭代器对象):
interface Aggregate
{
Iterator CreateIterator();
}
具体聚合类:
class ConcreteAggregate:Aggregate
{
...
public Iterator CreateIterator()
{
return new ConcreteIterator(this);
}
...
}