概述 给定一个语言定义它的文法的一种表示并定义一个解释器这个解释器使用该表示来解释语言中的句子 适用性 访问一个聚合对象的内容而无需暴露它的内部表示 支持对聚合对象的多种遍历 为遍历不同的聚合结构提供一个统一的接口(即支持多态迭代) 参与者 Iterator 迭代器定义访问和遍历元素的接口 ConcreteIterator 具体迭代器实现迭代器接口 对该聚合遍历时跟蹤当前位置 Aggregate 聚合定义创建相应迭代器对象的接口 ConcreteAggregate 具体聚合实现创建相应迭代器的接口该操作返回ConcreteIterator的一个适当的实例 类图 示例代码: package comsqlactioned; import javautilArrayList; import javautilList; /** * 迭代器模式 实现示例 * @author sean */ interface IIterator<T> { T next(); void first(); void last(); boolean hasNext(); } class IIteratorImpl<T> implements IIterator<T> { private IList<T> list; private int index; public IIteratorImpl (IList<T> list) { index = ; thislist = list; } @Override public T next() { T t = listget(index); index++; return t; } @Override public void first() { index = ; } @Override public void last() { index = listsize(); } @Override public boolean hasNext() { return index < listsize(); } } interface IList<T> { IIterator<T> iterator(); T get(int index); int size(); void add(T obj); } class IListImpl<T> implements IList<T> { private List<T> list; private int index; public IListImpl() { list = new ArrayList<T>(); index = ; } @Override public IIterator<T> iterator() { return new IIteratorImpl<T> (this); } @Override public T get(int index) { return listget(index); } @Override public int size() { return listsize(); } @Override public void add(T obj) { listadd(obj); } } public class IteratorTest { public static void main(String[] args) { // ways of iteration IList<String> list = new IListImpl<String>(); listadd(a); listadd(b); listadd(c); // st way Systemoutprintln( using iterator to traverse:); IIterator<String> iter = erator(); while (iterhasNext()) { Systemoutprintln(iternext()); } // nd way Systemoutprintln( using list to traverse: ); for (int i=; i<listsize(); i++) { Systemoutprintln(listget(i)); } } } 结果: using iterator to traverse: a b c using list to traverse: a b c |