迭代器模式,提供一種方法順序訪問一個聚合對象中的各類元素,而又不暴露該對象的內部表示。java
(1)迭代器角色(Iterator):定義遍歷元素所須要的方法,通常來講會有這麼三個方法:ide
(2)具體迭代器角色(Concrete Iterator):實現迭代器接口中定義的方法,完成集合的迭代。this
(3)容器角色(Aggregate): 通常是一個接口,提供一個iterator()方法,例如java中的Collection接口,List接口,Set接口等spa
(4)具體容器角色(ConcreteAggregate):就是抽象容器的具體實現類,好比List接口的有序列表實現ArrayList,List接口的鏈表實現LinkList,Set接口的哈希列表的實現HashSet等。code
抽象的集合對象
/** * 抽象的彙集。(能夠理解爲Java中的Collection接口) */ public interface Aggregate { //返回迭代器 Iterator iterator(); }
抽象的迭代器blog
/** * 抽象的迭代器 */ public interface Iterator { //移動到第一個元素 void first(); //是否還有元素 boolean hasNext(); //返回下一個元素 Object next(); }
具體的集合接口
/** * 具體的彙集(能夠理解爲Java中的Collection的實現類) */ public class ConcreteAggregate implements Aggregate { private Object[] list = {"zhangsan", "lisi", "wangwu", "zhaoliu"}; public Object getElement(int index) { if (index < list.length) { return list[index]; } //越界 return null; } public int size() { return list.length; } /** * 由當前具體的彙集返回迭代器 */ @Override public Iterator iterator() { return new ConcreteIterator(this); } }
具體的迭代器element
/** * 具體的迭代器 */ public class ConcreteIterator implements Iterator { private ConcreteAggregate concreteAggregate; private int index; private int size; public ConcreteIterator(ConcreteAggregate concreteAggregate) { this.concreteAggregate = concreteAggregate; size = concreteAggregate.size(); index = 0; } @Override public void first() { index = 0; } @Override public boolean hasNext() { return index < size; } @Override public Object next() { return concreteAggregate.getElement(index++); } }
客戶端代碼rem
public class Client { public static void main(String[] args) { Aggregate aggregate = new ConcreteAggregate(); Iterator iterator = aggregate.iterator(); while (iterator.hasNext()) { Object element = iterator.next(); System.out.println(element); } } } 打印結果: zhangsan lisi wangwu zhaoliu