迭代器模式(Iterator pattern)
迭代器模式是一种行为型设计模式。
迭代器模式用来顺序访问一个聚合对象中的个个元素,而又无需暴露该对象的内部表示。
该模式的适用性
1)访问一个聚合对象的内容无需暴露它的内部表示
2)支持聚合对象的多种遍历
3)为遍历不同的聚合结构提供一个统一的接口
该模式的参与者
1)迭代器(Iterator):定义访问和遍历的接口
2)具体迭代器(ConcreteIterator):实现迭代器接口
3)聚合(Aggregate):定义创建相应迭代对象的接口
4)具体聚合(ConcreteAggregate):实现创建相应迭代器的接口,该操作返回一个适当的实例(ConcreteLterator)
模式关系图
代码实现
Iterator接口
public interface Iterator{
boolean hasNext();
Object next();
}
Aggregate接口
public interface Aggregate {
Iterator iterator();
}
ConcreteAggregate类和内部类ConcreteIterator
package test;
public class ConcreteAggregate implements Aggregate {
private Integer[] data = {1,2,3,4};
@Override
public Iterator iterator() {
return new ConcreteIterator();
}
private class ConcreteIterator implements Iterator{
int index = 0;
@Override
public boolean hasNext() {
if( index < data.length) {
return true;
}else {
return false;
}
}
@Override
public Object next() {
Object obj = data[index];
index++;
return obj;
}
}
}
要迭代一个聚合对象,不需要知道具体的迭代实现,通过迭代方法返回一个内部实现迭代器接口的特有的迭代器,通过该迭代器可以实现迭代类中的聚合对象。不需知道具体的聚合对象和具体的迭代方法的实现。通过迭代器实现的方法最终完成迭代行为。
迭代Demo
public class IteratorDemo {
public static void main(String[] args) {
// 创建带有聚合对象的类,内部迭代器接口实现类实现对聚合对象遍历的迭代器接口方法
ConcreteAggregate ct = new ConcreteAggregate();
// 得到迭代器接口实现类对象
Iterator iterator = ct.iterator();
// 迭代
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}