1. 类图
- Iterator:迭代器接口。定义访问和遍历元素的接口
- ConcreteIterator:迭代器实现类。实现对聚合对象的遍历,并跟踪遍历时的当前位置
- Aggregate:聚合对象。定义创建相应迭代器对象的接口
- ConcreteAggregate:聚合对象实现。实现创建相应的迭代器对象
2. 示例
统一访问聚合元素的方法
2.1 迭代器接口
public interface Iterator {
void first();
void next();
boolean isDone();
Object currentItem();
}
2.2 迭代器实现
处理不同聚合对象的处理方式
public class ArrayIteratorImpl<T> implements Iterator {
private T[] t = null;
private int index = -1;
public ArrayIteratorImpl(T[] t){this.t = t;}
@Override
public void first() {this.index = 0;}
@Override
public void next() {
if (this.index < this.t.length) {
this.index += 1;
}
}
@Override
public boolean isDone() {return this.index == this.t.length;}
@Override
public Object currentItem() {return this.t[this.index];}
}
public class ListIteratorImpl<T> implements Iterator {
private List<T> list = null;
private int index = -1;
public ListIteratorImpl(List<T> list){this.list = list;}
@Override
public void first() {this.index = 0;}
@Override
public void next() {
if(this.index < this.list.size()){
this.index += 1;
}
}
@Override
public boolean isDone() {return this.list.size() == this.index;}
@Override
public Object currentItem() {return this.list.get(this.index);}
}
2.3 聚合对象
public abstract class Aggregate {
public abstract Iterator createIterator();
}
2.4 聚合对象实现
public class ArrayAggregate extends Aggregate {
@Override
public Iterator createIterator() {
return new ArrayIteratorImpl<>(new String[]{"1","2","3","4","5"});
}
}
public class ListAggregate extends Aggregate {
@Override
public Iterator createIterator() {
return new ListIteratorImpl<>(Arrays.asList("a","b","c","d","e"));
}
}
2.5 客户端
public class Client {
public static void main(String[] args) {
Aggregate aggregate = new ListAggregate();
// Aggregate aggregate = new ArrayAggregate();
Iterator iterator = aggregate.createIterator();
iterator.first();
while (!iterator.isDone()) {
System.out.println("迭代器:" + iterator.currentItem());
iterator.next();
}
}
}
3. 优点
- 更好的封装性
- 简化聚合接口