🎯 什麼情境該想到我

當你「想依序走過一個集合裡的每個元素,卻不想(也不該)知道它內部到底是用陣列、鏈結串列、樹還是雜湊表存的」的時候,或想對同一個集合支援多種走訪方式並統一走訪介面。

⚙️ 怎麼用(步驟 / 公式)

意圖:提供一種方法,循序存取一個聚合物件中的各個元素,而又不暴露該物件的內部表示。

主要參與者 / 結構:

  • Iterator(迭代器介面):宣告 hasNext()next()(有時含 first()current())。
  • ConcreteIterator(具體迭代器):實作走訪邏輯,並記住目前走到哪。
  • Aggregate(聚合介面):宣告 createIterator()
  • ConcreteAggregate(具體聚合):回傳一個能走訪自己的具體迭代器。

做法要點:

  1. 把「走訪的狀態與邏輯」從集合本身抽出,放進獨立的迭代器物件。
  2. 客戶端只透過 Iterator 介面走訪,不碰集合內部。
  3. 同一集合可提供多個迭代器(不同順序、可同時多個各自獨立走訪)。

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 現代語言大多內建迭代機制(foreachfor...of、iterator/generator),通常直接用語言機制即可,不必自己造。
  • 走訪過程中若修改集合,可能導致迭代器失效或行為未定義。
  • 對極簡單、固定的小集合,手寫迴圈反而更直接。

🔗 相關工具