分類

行為型模式。

這個模式在解決什麼

迭代器模式把「怎麼走訪集合內容」這件事,從集合本身抽出來。

這樣做的好處是:

  • 呼叫端可以用一致的方式走訪不同集合
  • 集合的內部結構不需要直接暴露給外部
  • 不同的走訪策略可以各自獨立演化

核心做法

集合物件負責提供迭代器,迭代器負責記錄目前走訪到哪裡,並提供像 next()hasNext() 這類操作。

於是外部不需要知道集合底層是陣列、樹、鏈結串列,還是自訂容器;它只要跟迭代器互動就好。

什麼時候適合用

下面幾種情況很常見:

  • 你有自訂集合型別,但不想讓外部直接碰其內部資料結構
  • 同一份資料需要不同走訪方式,例如正向、反向、分批或過濾式迭代
  • 你希望多個集合都能提供統一的遍歷介面

例子

如果專案裡有一個自訂的任務佇列、對話節點集合,或是 AI 巡邏點清單,就可以為它提供迭代器。這樣使用端只要一直呼叫迭代器介面,就能逐一取得資料,而不用知道資料實際上怎麼存。

這種做法在集合類型很多時特別有價值,因為外部的使用方式可以維持一致。

類圖

這一篇先記住的重點

  • 迭代器模式的本質是把遍歷責任從集合中拆出來
  • 它讓外部依賴「走訪介面」,而不是依賴集合內部結構
  • 當集合需要多種遍歷方式時,這個模式會很自然

參考書目

《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates