--- 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=閔致]