迭代器模式定義
提供一種方式來訪問聚合對象,而不用暴漏這個對象內部表示,其別名為游標,迭代器模式是一種對象行為模式。
迭代器模式結構圖:
image.png
java內置迭代器的使用
java內置提供了Iterable<E> 泛型接口,來實現聚合對象的迭代。
迭代器模式主要優缺點
優點
1.支持以不同的方式便利一個聚合對象,在同一個聚合對象上可以定義多種遍歷方式。在迭代器模式中需要用一個不同的迭代器來替換原有迭代器即可變化遍歷算法,也可以自己定義迭代器的子類以支持新的遍歷方式。
2.迭代器簡化了聚合類。由于引入了迭代器,在原有聚合對象中不需要在自行提供數據便利等方法,這樣可以簡化聚合類的設計。
3.迭代器模式中,由于引入了抽象層,增加新的聚合類和迭代器類都很方便,無須修改原有代碼,滿足開閉原則的要求。
缺點
1.由于迭代器模式將儲存數據和遍歷數據的職責分離。增加新的聚合類需要對應增加新的迭代器類。類的個數成對增加。
2.抽象迭代器的設計難度較大,如果需要實現逆向便利,只能通過其子集類ListIterator來擴展,而ListIterator迭代器無法用于操作set類型的聚合對象,在自定義迭代器時,創建一個考慮全面的迭代器并不是很容易。
迭代器模式適用場景
1.訪問一個聚合對象的內容而無須暴漏它的內部表示,將聚合對象的訪問與內部數據的存儲分離,使得訪問聚合對象時,無須了解內部實現細節。
2.需要為一個聚合對象提供多種遍歷方式。
3.為遍歷不同的聚合解構提供一個統一的接口,在該接口的實現類中為不同的聚合解構提供不同的遍歷方式,而客戶端可以一致性地操作該接口。