”大風車吱呀吱悠悠的轉,這裡的風景啊真好看,天好看,地好看,還有一群快樂的小夥伴,大風車轉呀轉悠悠,快樂的夥伴手牽着手,牽着你的手,牽着我的手......“童年的美好時光因為有了《動畫城》的陪伴而倍感幸福,那個時候,家裡有一台古董式的電視機,是一台黑白電視機,轉台的時候需要通過電視機上面的那些按鈕來完成,也就是換台的按鈕,但是并不是每次都那麼幸運,可以準時收看我喜歡的兒童節目,有時候出現一片白茫茫的雪花點兒,剩下的就隻是郁悶了。就這樣,卡通片穩穩的托住了我童年的歡樂。
随着科技的飛速發展,各種電視機可謂是百家争鳴,百花齊放,三星SAMSUNG ,索尼SONY液晶電視 ,海信Hisense液晶電視等,讓你眼花缭亂,而那些黑白的電視機慢慢淡出我們的視線,歸隐山林,與那時的電視機相比,現今的電視機給我們帶來的最大便利之一就是增加了電視機遙控器,我們在進行開機、關機、換台、改變音量等操作時都無須直接操作電視機,可以通過遙控器來間接實作。我們可以将電視機看成一個存儲電視訊道的集合對象,通過遙控器可以對電視機中的電視訊道集合進行操作,如傳回上一個頻道、跳轉到下一個頻道或者跳轉至指定的頻道。遙控器為我們操作電視訊道帶來很大的友善,使用者并不需要知道這些頻道到底如何存儲在電視機中。
今天我們的設計模式就從電視機遙控器開始說起,在軟體開發中,也存在大量類似電視機一樣的類,它們可以存儲多個成員對象,這些類通常稱為聚合類(Aggregate Classes),對應的對象稱為聚合對象。為了更加友善地操作這些聚合對象,同時可以很靈活地為聚合對象增加不同的周遊方法,我們也需要類似電視機遙控器一樣的角色,可以通路一個聚合對象中的元素但又不需要暴露它的内部結構。首先我們來看一下疊代器模式的結構圖;

對上述結構圖進行一些解釋:
Iterator(抽象疊代器):它定義了通路和周遊元素的接口,聲明了用于周遊資料元素的方法,例如:用于擷取第一個元素的first()方法,用于通路下一個元素的next()方法,用于判斷是否還有下一個元素的hasNext()方法,用于擷取目前元素的currentItem()方法等,在具體疊代器中将實作這些方法。
ConcreteIterator(具體疊代器):它實作了抽象疊代器接口,完成對聚合對象的周遊,同時在具體疊代器中通過遊标來記錄在聚合對象中所處的目前位置,在具體實作時,遊标通常是一個表示位置的非負整數。
Aggregate(抽象聚合類):它用于存儲和管理元素對象,聲明一個createIterator()方法用于建立一個疊代器對象,充當抽象疊代器工廠角色。
ConcreteAggregate(具體聚合類):它實作了在抽象聚合類中聲明的createIterator()方法,該方法傳回一個與該具體聚合類對應的具體疊代器ConcreteIterator執行個體。
在疊代器模式中,提供了一個外部的疊代器來對聚合對象進行通路和周遊,疊代器定義了一個通路該聚合元素的接口,并且可以跟蹤目前周遊的元素,了解哪些元素已經周遊過而哪些沒有。疊代器的引入,将使得對一個複雜聚合對象的操作變得簡單。
疊代器模式周遊集合的成熟模式,疊代器模式的關鍵是将周遊集合的任務交給一個叫做疊代器的對象,它的工作時周遊并選擇序列中的對象,而用戶端程式員不必知道或關心該集合序列底層的結構。