迭代器模式是一種使用頻率很是高的設計模式,經過引入迭代器能夠將數據的遍歷功能從聚合對象中分離出來,聚合對象只負責存儲數據,而遍歷數據由迭代器來完成。因爲不少編程語言的類庫都已經實現了迭代器模式,所以在實際開發中,咱們只須要直接使用Java、C#等語言已定義好的迭代器便可,迭代器已經成爲咱們操做聚合對象的基本工具之一。算法
1. 主要優勢編程
迭代器模式的主要優勢以下:設計模式
(1) 它支持以不一樣的方式遍歷一個聚合對象,在同一個聚合對象上能夠定義多種遍歷方式。在迭代器模式中只須要用一個不一樣的迭代器來替換原有迭代器便可改變遍歷算法,咱們也能夠本身定義迭代器的子類以支持新的遍歷方式。編程語言
(2) 迭代器簡化了聚合類。因爲引入了迭代器,在原有的聚合對象中不須要再自行提供數據遍歷等方法,這樣能夠簡化聚合類的設計。工具
(3) 在迭代器模式中,因爲引入了抽象層,增長新的聚合類和迭代器類都很方便,無須修改原有代碼,知足「開閉原則」的要求。設計
2. 主要缺點對象
迭代器模式的主要缺點以下:blog
(1) 因爲迭代器模式將存儲數據和遍歷數據的職責分離,增長新的聚合類須要對應增長新的迭代器類,類的個數成對增長,這在必定程度上增長了系統的複雜性。接口
(2) 抽象迭代器的設計難度較大,須要充分考慮到系統未來的擴展,例如JDK內置迭代器Iterator就沒法實現逆向遍歷,若是須要實現逆向遍歷,只能經過其子類ListIterator等來實現,而ListIterator迭代器沒法用於操做Set類型的聚合對象。在自定義迭代器時,建立一個考慮全面的抽象迭代器並非件很容易的事情。開發
3. 適用場景
在如下狀況下能夠考慮使用迭代器模式:
(1) 訪問一個聚合對象的內容而無須暴露它的內部表示。將聚合對象的訪問與內部數據的存儲分離,使得訪問聚合對象時無須瞭解其內部實現細節。
(2) 須要爲一個聚合對象提供多種遍歷方式。
(3) 爲遍歷不一樣的聚合結構提供一個統一的接口,在該接口的實現類中爲不一樣的聚合結構提供不一樣的遍歷方式,而客戶端能夠一致性地操做該接口。