迭代器用于对一个聚合对象进行遍历。通过引入迭代器可以将数据的遍历功能从聚合对象中分离出来,聚合对象只负责存储数据,而遍历数据由迭代器完成,简化了聚合对象的设计,更符合单一职责原则的要求。
迭代器模式的定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不用暴露该对象的内部表示。
迭代器模式又称为游标模式,它是一种对象行为型模式。
迭代器模式的结构与实现:
1.Iterator(抽象迭代器):它定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法,例如用于获取第一个元素的first()方法,用于访问下一个元素的next()方法,用于判断是否还有下一个元素的hasNext()方法,用于获取当前元素currentItem()方法等,在具体 迭代器中将实现这些方法。
public interface Iterator {
public void first();
public void next();
public boolean hasNext();
public Object currentItem();
}
2.ConcreteIterator(具体迭代器):实现了抽象迭代器接口,完成对聚合对象的遍历,同时在具体迭代器中通过游标来记录在聚合对象中所处的当前位置。
public class ConcreteIterator implements Iterator {
@Override
public void first() {
System.out.println("first");
}
@Override
public void next() {
System.out.println("next");
}
@Override
public boolean hasNext() {
System.out.println("hasNext");
return false;
}
@Override
public Object currentItem() {
System.out.println("currentItem");
return null;
}
}
3.Aggregate(抽象聚合类):用于存储和管理元素对象,声明一个方法,用于创建一个迭代器对象,充当抽象迭代器工厂角色。
public interface Aggregate {
Iterator createIterator();
}
4.ConcreteAggregate(具体聚合类):是抽象聚合类的子类,实现了在抽象聚合类中声明的方法,该方法返回一个与该具体聚合类对应的具体迭代器实例。
public class ConcreteAggregate implements Aggregate {
@Override
public Iterator createIterator() {
return new ConcreteIterator();
}
}