迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
当需要访问一个聚合对象且不管这些对象具体是什么就需要遍历的时候,就应该考虑用迭代器模式。对聚集对象有多种遍历方式时,也应该考虑迭代器模式。所谓迭代器模式,就是为遍历不同的聚集结构如开始、下一个、是否结束、当前哪一项等提供统一的接口。
C#,Java等已经将迭代器模式实现在语言中了,下面代码使用Java实现了一个自定义迭代器。
package com.gacfox.demo;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class NumberIterator implements Iterator<Integer> {
private final int[] numbers;
private int position = 0;
public NumberIterator(int[] numbers) {
this.numbers = numbers;
}
@Override
public boolean hasNext() {
return position < numbers.length;
}
@Override
public Integer next() {
if (!hasNext()) {
throw new NoSuchElementException("No more numbers.");
}
int current = numbers[position];
moveToNext();
return current;
}
private void moveToNext() {
position++;
}
}