設計模式之迭代模式(Iterator)

2021-07-10 02:50:04 字數 992 閱讀 2403

意圖:提供一種順序訪問乙個聚合物件中各個元素,而不需要暴露聚合物件內部行為。即將列表的訪問和遍歷從列表物件中分離出來,放入迭代器物件中。使遍歷和列表物件介面。可產生乙個列表物件可以復用多個迭代器(多種遍歷方式),乙個迭代器支援多個列表物件(多個列表物件由相同遍歷演算法,或者列表物件本身提供演算法差異部分)的程式設計效果效果。

類圖:(來自《設計模式:可復用物件導向軟體的基礎》)

參與者:

aggregate(聚合物件介面):聚合物件介面,定義了建立相應迭代器(iterator)的介面。

iterator(迭代器介面):迭代器的介面,定義順序訪問遍歷聚合物件內容的相關方法。遍歷方式可以是正序、倒敘(針對集合)、前序、後序、中序以及廣度遍歷(針對數集合或者復合物件)。方法可以根據實際情況相應擴充套件或者減少。

concreteaggregate(聚合物件實現類):聚合物件實現類,儲存遍歷的聚合資料。實現聚合物件介面。負責建立返回迭代器(iterator)的具體實現類(concreteiterator)。

concreteiterator(迭代器實現類):實現迭代器介面,提供實際的遍歷方法(遍歷演算法可以自己通過,也聚合實現類(concreteaggregate)提供)。

client(使用者):迭代器遍歷使用者,持有聚合物件介面(aggregate)和迭代器介面(iterator)。不持有迭代器實現類(concreteiterator),可能持有聚合物件實現類(concreteaggregate)(具體看concreteaggregate產生方式,若非直接new,也不持有)。

優點(來自《設計模式:可復用物件導向軟體的基礎》):

設計模式相關說明:

空迭代器:是乙個退化的迭代器,isdone()始終返回true。

外部迭代器:由使用者來控制迭代的迭代器。相對於內部迭代器更加靈活,但是比較複雜。

內部迭代器:由迭代器自己控制迭代。相應外部比較容易。

設計模式之迭代模式

class baseiterator 迭代器 def init self,data self.data data self.tobegin deftobegin self 將指標移至起始位置 self.curidx 1 deftoend self 將指標移至結尾位置 self.curidx len ...

設計模式之迭代器模式

概念 提供一種方法順序訪問乙個聚合物件中各個元素,而又不需暴露該物件的內部表示。main 客戶 iproject,產品介面 cproject,產品類 iiterator,迭代器介面 iprojectiterator,產品迭代器介面 cprojectiterator,產品迭代器實現類 說明 cproj...

設計模式之迭代器模式

當你需要訪問乙個聚集物件,而且不管這些物件是什麼都需要遍歷的時候,而且可能對聚集有多種方式遍歷時,需要為遍歷不同的聚集結構提供如開始,下乙個,是否結束,當前哪一項等 統一介面,你就應該考慮用迭代器模式.提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示.uml設計圖 部分 ite...