###模式定義this
提供一種方法順序訪問一個聚合對象中的各類元素,而又不暴露該對象的內部表示。code
###模式結構 對象
Iterator:迭代器接口。定義訪問和遍歷元素的接口。接口
ConcreteIterator:具體的迭代器實現對象。實現對聚合對象的遍歷,並跟蹤遍歷時的當前位置。開發
Aggregate:聚合對象。定義建立相應迭代器對象的接口。get
ConcreteAggregate:具體聚合對象。實現建立相應的迭代器對象。 ###代碼實現it
public abstract class Aggregate { public abstract Iterator CreateIterator(); } class ConcreteAggregate extends Aggregate { private String[] ss = null; public ConcreteAggregate(String[] ss) { this.ss = ss; } public Iterator CreateIterator() { return new ConcreteIterator(this); } public Object get(int index) { Object object = null; if (index < ss.length) { object = ss[index]; } return object; } public int size() { return this.ss.length; } } public interface Iterator { public void first(); public void next(); public Object currentItem(); public boolean idDone(); } class ConcreteIterator implements Iterator { private int index = -1; private ConcreteAggregate aggregate; public ConcreteIterator(ConcreteAggregate aggregate) { this.aggregate = aggregate; } public void first() { index = 0; } public void next() { if (index < this.aggregate.size()) { index = index + 1; } } public Object currentItem() { return this.aggregate.get(index); } public boolean idDone() { if(index == this.aggregate.size()){ return true; } return false; } } public class Client { public static void main(String[] args) { String[] names = {"1", "2", "3"}; Aggregate aggregate = new ConcreteAggregate(names); Iterator iterator = aggregate.CreateIterator(); iterator.first(); while (!iterator.idDone()) { Object obj = iterator.currentItem(); System.out.println(obj); iterator.next(); } } }
###模式的優缺點 ####優勢class
它支持以不一樣的方式遍歷一個聚合對象。object
迭代器簡化了聚合類。遍歷
在同一個聚合上能夠有多個遍歷。
在迭代器模式中,增長新的聚合類和迭代器類都很方便,無須修改原有代碼。
####缺點 因爲迭代器模式將存儲數據和遍歷數據的職責分離,增長新的聚合類須要對應增長新的迭代器類,類的個數成對增長,這在必定程度上增長了系統的複雜性。 ###思考
模式本質:控制訪問聚合對象中的元素。
###開發中的應用場景
訪問一個聚合對象的內容而無須暴露它的內部表示。
須要爲聚合對象提供多種遍歷方式。
爲遍歷不一樣的聚合結構提供一個統一的接口。