iterateは日本語で「繰り返す」,iteratorは日本語で「反復子」という意味になる.Iteratorパターンは,オブジェクトの集合に対して順序良くアクセスする方法を提供したパターンである.
Iteratorパターンの主な要素は以下である.
javaimport java.util.ArrayList;
import java.util.List;
// Iterator Interface
interface Iterator<T> {
boolean hasNext();
T next();
}
// Aggregate (Collection) Interface
interface Aggregate<T> {
Iterator<T> iterator();
}
// Concrete Iterator
class ConcreteIterator<T> implements Iterator<T> {
private List<T> list;
private int cursor;
public ConcreteIterator(List<T> list) {
this.list = list;
this.cursor = 0;
}
@Override
public boolean hasNext() {
return cursor != list.size();
}
@Override
public T next() {
T obj = null;
if (this.hasNext()) {
obj = this.list.get(cursor++);
}
return obj;
}
}
// Concrete Aggregate
class ConcreteAggregate<T> implements Aggregate<T> {
private List<T> list;
public ConcreteAggregate() {
this.list = new ArrayList<>();
}
public void add(T obj) {
this.list.add(obj);
}
@Override
public Iterator<T> iterator() {
return new ConcreteIterator<>(this.list);
}
}
// Client
public class IteratorPattern {
public static void main(String[] args) {
ConcreteAggregate<String> aggregate = new ConcreteAggregate<>();
aggregate.add("A");
aggregate.add("B");
aggregate.add("C");
Iterator<String> iterator = aggregate.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
Aggregateはオブジェクトの集合体を保持・管理しておくためのもの,Iteratorはオブジェクトの集合体からオブジェクトを順に列挙していくものという感覚?