iT邦幫忙

第 12 屆 iThome 鐵人賽

3
Software Development

你終究都要學設計模式的,那為什麼不一開始就學呢?系列 第 33

Day33. 迭代器模式

本文同步更新於blog

Iterator Pattern

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

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


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

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

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


舉例:

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


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

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


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

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

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

其他SPL (Standard PHP Library) 的Iterator


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


上一篇
Day32. 範例:資料庫連線(單例模式)
下一篇
Day34. 範例:歌曲排行(迭代器模式)
系列文
你終究都要學設計模式的,那為什麼不一開始就學呢?57
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言