一、概述
提供一種方法順序訪問一個彙總對象中各個元素,而又不暴漏對象的內部表示。
二、設計角色
1) 迭代器角色(Iterator):迭代器角色負責定義訪問和遍曆元素的介面。
2) 具體迭代器角色(Concrete Iterator):具體迭代器角色要實現迭代器介面,並要記錄遍曆中的當前位置。
3) 容器角色(Container):容器角色負責提供建立具體迭代器角色的介面。
4) 具體容器角色(Concrete Container):具體容器角色實現建立具體迭代器角色的介面——這個具體迭代器角色於該容器的結構相關。
例子:
/* * 迭代器抽象類別 */public abstract class Iterator { /* * 擷取集合中的下一個元素 */ public abstract Object next(); /* * 是否存在下一個元素 */ public abstract boolean isHasNext();}/* * 具體聚集類 */public class ConcreteAggregate { private ArrayList<String> list; public ConcreteAggregate(ArrayList<String> list) { this.list = list; } public Iterator createIterator() { return new ConcreteIterator(); } public void add(String s){ this.list.add(s); } public void remove(String s){ this.list.remove(s); } /* * 內部類:具體迭代器 */ public class ConcreteIterator extends Iterator{ int currIndex = 0; @Override public Object next() { if(currIndex<list.size()){ return list.get(currIndex++); }else{ return null; } } @Override public boolean isHasNext() { return currIndex<list.size()?true:false; } }}/* * 用戶端 */public class App { public static void main(String[] args) { ConcreteAggregate agg = new ConcreteAggregate(new ArrayList<String>()); agg.add("a"); agg.add("b"); agg.add("c"); agg.add("d"); agg.add("e"); agg.add("f"); Iterator iterator = agg.createIterator(); while(iterator.isHasNext()){ System.out.println(iterator.next()); } }}