---
# System prepended metadata

title: 走訪器模式 Iterator
tags: [Behavioral Patterns]

---

---
tags: Behavioral Patterns
---

# 走訪器模式 Iterator


提供一種方法可以順序性讀取一個集合物件中的各個元素
![](https://i.imgur.com/ZdFyIFv.png)
1. Aggregate:定義新增、儲存、刪除集合物件及建立迭代器物件的接口。
2. ConcreteAggregate:實作Aggregate，回傳一個迭代器的實體。
3. Iterator:定義呼叫及遍歷集合元素的接口，通常包含hasNext()、first()、next()等方法。
4. Concretelterator:實現Iterator所定義的方法，完成集合物件的遍歷及記錄當前的位置。

> [name=玟廷]



我們可以得知為了完成同一個目的，所以才將功能改成介面實現。
像是常用的舉例不同的array、arraylist有不同的取值方法為了完成這點，程式分別實作不同的功能。

**Iterator** 可以想像成這一些系統會有什麼共通的功能，如：取得下一個元素、刪除指定元素(list和array的做法不同)。

**Aggregate** 一個系統的大介面，裡面會有**Iterator**

**ConcreteIterator**實作共通功能，根據不同方法實作不同的介面出來

**ConcreteAggregate** 實作**Aggregate**、**Iterator**的介面。

基本上我們不管**ConcreteAggregate**內部的架構，重點應著重於是否換成其他架構一樣能執行程式。因為要確保程式的正確性我們可以得知Aggregate 與　Iterator 是一個**相互對應的關係**。

> [name=閔致]

