迭代器模式

Iterator Pattern

提供一種方法順序訪問一個聚合對象中的各個元素,

而又不暴露其內部的表示。

Example: 歌曲排行


迭代器模式會將類別分為兩類:
分別是集合類別 (Aggregate / Collection)迭代器類別 (Iterator)

集合類別負責提供統一介面,供所有集合元素使用,使客戶與集合元素的實現解耦。

迭代器類別則負責提供在集合元素中遊走的方法。


舉例:

集合元素 -> 集合類別
歌曲 -> 歌單
菜式 -> 菜單
書本 -> 書單


優點:
分離了集合物件的遍歷行為,可以在不暴露集合內部的情況下,供外部存取。
新增/修改遍歷規則時,不會影響到集合元素。

缺點:
若只是簡單的遍歷,可能會是一種過度設計。


其實此模式的實現,現在大都已被封裝,只要實現對應的介面就好了。

以PHP而言,主要有以下幾個介面與迭代器模式有關。

介面名稱 用途
Traversable 所有迭代器介面的源頭,主要用來判斷能不能用foreach遍歷。
IteratorAggregate 集合類別的介面,主要用來提供迭代器,需與Iterator介面一起實作。
Iterator 迭代器的介面,定義了遍歷時會用到的方法,需與IteratorAggregate介面一起實作。

其他SPL (Standard PHP Library) 的Iterator


ʕ •ᴥ•ʔ:讓我們一起欣賞這個古老的模式!