簡介
在面向對象編程里, 疊代器模式是一種設計模式,是一種最簡單也最常見的設計模式。它可以讓用戶透過特定的接口巡訪容器中的每一個元素而不用了解底層的實現。
此外,也可以實現特定目的版本的疊代器。
意圖
提供一種方法順序訪問一個聚合對象中各個元素,而又不需暴露該對象的內部表示。
適用性
訪問一個聚合對象的內容而無需暴露它的內部表示
支持對聚合對象的多種遍歷
為遍歷不同的聚合結構提供一個統一的接口
1.訪問一個聚合對象的內容而無需暴露它的內部表示
2.支持對聚合對象的多種遍歷
3.為遍歷不同的聚合結構提供一個統一的接口
參與者
1.Iterator(疊代器)
![疊代器模式](/img/1/2fe/wZwpmL2cjMwgjM0UTM0YTN1UTM1QDN5MjM5ADMwAjMwUzL1EzLzgzLt92YucmbvRWdo5Cd0FmLzE2LvoDc0RHa.jpg)
疊代器定義訪問和遍曆元素的接口
2.ConcreteIterator (具體疊代器)
具體疊代器實現疊代器接口
對該聚合遍歷時跟蹤當前位置
3.Aggregate (聚合)
聚合定義創建相應疊代器對象的接口
4.ConcreteAggregate (具體聚合)
具體聚合實現創建相應疊代器的接口,該操作返回ConcreteIterator的一個適當的實例
協作
ConcreteIterator跟蹤聚合中的當前對象,並能夠計算出待遍歷的後繼對象。
效果
它支持以不同的方式遍歷一個聚合
疊代器簡化了聚合的接口
在同一個聚合上可以有多個遍歷
1.它支持以不同的方式遍歷一個聚合
2.疊代器簡化了聚合的接口
3.在同一個聚合上可以有多個遍歷
實例
在 Python 中,疊代器是遵循 疊代協定的對象。用戶可以使用iter()以從任何序列得到疊代器(如 list, tuple, dictionary, set 等)。另一個方法則是創建一個另一種形式的疊代器 —— generator 。要獲取下一個元素,則使用成員函式 next()(Python 2)或函式 next() function (Python 3) 。當沒有元素時,則引發StopIteration此例外。若要實現自己的疊代器,則只要實現next()(Python 2)或__next__()( Python 3)。
以下為兩個例子: