1、定義
提供乙個物件來順序訪問聚合物件中的一系列資料,而不暴露聚合物件的內部表示。是一種物件行為型模式。
2、優缺點
優點封裝性好,為遍歷不同的聚合結構提供乙個統一的介面;
訪問乙個聚合物件的內容而無須暴露它的內部表示;
遍歷任務交由迭代器完成,這簡化聚合類;
支援以不同方式遍歷乙個聚合,甚至可以自定義迭代器的子類以支援新的遍歷;
增加新的聚合類和迭代器類都很方便,無須修改原有**,符合開閉原則。
缺點增加了類的個數,這在一定程度上增加了系統的複雜性。在日常的開發過程中,幾乎很少會自己寫迭代器。除非需要定製乙個自己實現的資料結構對應的迭代器,否則,開源框架提供的api完全夠用。
3、uml類圖
主要包含以下角色:
抽象聚合(aggregate)角色:定義儲存、新增、刪除聚合物件以及建立迭代器物件的介面;
具體聚合(concreteaggregate)角色:實現抽象聚合類,返回乙個具體迭代器的例項;
抽象迭代器(iterator)角色:定義訪問和遍歷聚合元素的介面,通常包含hasnext()、first()、next()等方法;
具體迭代器(concreteiteratot)角色:實現抽象迭代器介面中所定義的方法,完成對聚合物件的遍歷,記錄遍歷的當前位置。
4、**例項
1/**2
* @author
it-小林
3* @desc 抽象迭代器
4* @date 2023年08月04日 14:045*/
6public
inte***ce
iterator
1/**2
* @author
it-小林
3* @desc 具體迭代器
4* @date 2023年08月04日 14:055*/
6public
class concreteiterator implements
iterator
1314
@override
15public
object next()
20return
obj;21}
2223
@override
24public
boolean
hasnext()
28return
true;29
}30 }
1/**2
* @author
it-小林
3* @desc 抽象類集合
4* @date 2023年08月04日 14:095*/
6public
inte***ce
aggregate
1/**2
* @author
it-小林
3* @desc 具體聚合類
4* @date 2023年08月04日 14:115*/
6public
class concreteaggregate implements
aggregate
1314
@override
15public
void
remove(object obj)
1819
@override
20public
iterator iterator()
23 }
15、應用場景/**2
* @author
it-小林
3* @desc 測試類
4* @date 2023年08月04日 14:145*/
6public
class
client 17}
18 }
當需要為聚合物件提供多種遍歷方式時;
當需要為遍歷不同的聚合結構提供乙個統一的介面時;
當訪問乙個聚合物件的內容而無須暴露其內部細節的表示。
6、模式的擴充套件
迭代器模式常常與組合模式結合起來使用,在對組合模式中的容器構件進行訪問時,經常將迭代器潛藏在組合模式的容器構成類中。當然,也可以構造乙個外部迭代器來對容器構件進行訪問,其結構圖如圖。
C 設計模式 十五 迭代器模式
對聚合類 如列表 的訪問和遍歷從列表物件中分離出來,並放入乙個迭代器物件中 迭代器定義了乙個訪問該列表元素的介面,迭代器負責跟蹤當前的元素,即知道哪些元素已經遍歷過了,如下圖所示 iterator 定義迭代器訪問和遍歷元素的介面 concreteiterator 實現具體的迭代器 aggregate...
PHP設計模式系列(十五) 迭代器模式
提供一種方法順序訪問乙個聚合物件中的各個元素,而不是暴露其內部的表示。php spl中已經提供了迭代器介面iterator和容器介面iteatoraggragate,這裡直接實現spl的裡的迭代器。迭代器模式 concreteiterator 具體迭代器 class concreteiterator...
設計模式 迭代器模式
迭代器模式是屬於物件行為性的模式。首先是定義 提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露物件的表示方法。迭代器的結構圖 適用性 1 訪問乙個聚合物件的內容而無需暴露它的內部表示 2 支援聚合物件的多種遍歷 3 為遍歷不同的聚合結構提供乙個統一的介面 支援多型迭代 協作 concretei...