Iterator Pattern
提供一種方法順序訪問一個聚合對象中的各個元素,
而又不暴露其內部的表示。
Example: 歌曲排行
迭代器模式會將類別分為兩類:
分別是集合類別 (Aggregate / Collection) 及 迭代器類別 (Iterator) 。
集合類別負責提供統一介面,供所有集合元素使用,使客戶與集合元素的實現解耦。
迭代器類別則負責提供在集合元素中遊走的方法。
舉例:
集合元素 -> 集合類別
歌曲 -> 歌單
菜式 -> 菜單
書本 -> 書單
優點:
分離了集合物件的遍歷行為,可以在不暴露集合內部的情況下,供外部存取。
新增/修改遍歷規則時,不會影響到集合元素。
缺點:
若只是簡單的遍歷,可能會是一種過度設計。
其實此模式的實現,現在大都已被封裝,只要實現對應的介面就好了。
以PHP而言,主要有以下幾個介面與迭代器模式有關。
介面名稱 | 用途 |
---|---|
Traversable | 所有迭代器介面的源頭,主要用來判斷能不能用foreach遍歷。 |
IteratorAggregate | 集合類別的介面,主要用來提供迭代器,需與Iterator介面一起實作。 |
Iterator | 迭代器的介面,定義了遍歷時會用到的方法,需與IteratorAggregate介面一起實作。 |
其他SPL (Standard PHP Library) 的Iterator。
ʕ •ᴥ•ʔ:讓我們一起欣賞這個古老的模式!