用途
迭代器模式 (Iterator) 提供一种方法顺序访问一个聚合对象中各个元素,而又 不暴露该对象的内部表示。 迭代器模式是一种 行为型模式。
结构
图-迭代器模式结构图
Iterator : 定义访问元素的接口。 interface Iterator { public Object first(); public Object next(); public boolean isDone(); public Object currentItem(); }ConcreteIterator : 实现 Iterator 接口。记录当前访问的元素在集合中的位置信息。
class ConcreteIterator implements Iterator { private int current = 0; private ConcreteAggregate aggregate; public ConcreteIterator(ConcreteAggregate aggregate) { this.aggregate = aggregate; } @Override public Object first() { return aggregate.get(0); } @Override public Object next() { current++; if (current < aggregate.size()) { return aggregate.get(current); } return null; } @Override public boolean isDone() { return (current >= aggregate.size()) ? true : false; } @Override public Object currentItem() { return aggregate.get(current); } }Aggregate : 定义创建 Iterator 对象的接口。
interface Aggregate { public Iterator CreateIterator(); }ConcreteAggregate : 实现 Iterator 接口,返回一个合适的 ConcreteIterator 实例。
class ConcreteAggregate implements Aggregate { private List<Object> items = new ArrayList<Object>(); @Override public Iterator CreateIterator() { return new ConcreteIterator( this); } public int size() { return items.size(); } public Object get( int index) { return items.get(index); } public void set( int index, Object element) { items.set(index, element); } public void add(Object element) { items.add(element); } }测试代码
public class IteratorPattern { public static void main(String[] args) { ConcreteAggregate aggregate = new ConcreteAggregate(); aggregate.add("张三"); aggregate.add("李四"); aggregate.add("王五"); aggregate.add("赵六"); Iterator iter = new ConcreteIterator(aggregate); Object item = iter.first(); System.out.println("第一个人是:" + item); System.out.println("所有人的名单是:"); while (!iter.isDone()) { System.out.println(iter.currentItem()); iter.next(); } } }运行结果
第一个人是:张三 所有人的名单是: 张三 李四 王五 赵六应用场景
推荐
本文属于 JAVA设计模式系列 。
参考资料
《大话设计模式》
《HeadFirst设计模式》