迭代器模式(Iterator Pattern)
定义
又称为游标模式(Cursor Pattern),它提供了一种顺序访问集合/容器对象元素的方法,而又无须暴露集合内部表示。
本质:抽离集合对象迭代行为到迭代器中,提供一致访问接口。
属于行为型模式。
适用场景
- 访问一个集合对象的内容而无需暴露它的内部表示
- 为遍历不同的集合结构提供一个统一的访问接口
标准示例
- 迭代器(Iterator):定义访问和遍历元素的接口,通常包含如hasNext()(判断是否有下一个元素)、next()(返回下一个元素)等方法。
- 具体迭代器(ConcreteIterator):实现迭代器接口,对聚合对象遍历时跟踪当前位置,并能够计算出待遍历的后继对象。
- 聚合(Aggregate):定义创建相应迭代器对象的接口。
- 具体聚合(ConcreteAggregate):实现创建相应迭代器的接口,返回一个具体迭代器对象。
代码:
public interface Iterator<E>{
boolean hasNext();
E next();
}
public class ConcreteIterator<E> implements Iterator<E>{
private List<E> list;
private int cursor = 0;
public ConcreteIterator(List<E> list){
this.list = list;
}
public boolean hasNext(){
return this.cursor < this.list.size();
}
public E next(){
return this.list.get(this.cursor ++);
}
}
public interface IAggregate<E>{
boolean add(E element);
boolean remove(E element);
Iterator<E> iterator();
}
public class ConcreteAggregate<E> implements IAggregate<E>{
private List<E> list = new Arraylist<E>();
public boolean add(E element){
return this.list.add(element);
}
public boolean remove(E element){
return this.list.remove(element);
}
public Iterator<E> iterator(){
return new ConcreteIterator<E>(this.list);
}
}
public class Test {
public static void main(String[] args) {
IAggregate<String> aggregate = new ConcreteAggregate<String>();
aggregate.add("java");
aggregate.add("python");
aggregate.add("javascript");
Iterator<String> iterator = aggregate.iterator();
while(iterator.hasNext()){
String element = iterator.next();
System.out.println(element);
}
}
}
输出结果:
java
python
javascript