介紹
迭代器模式(Iterator Pattern) 又稱游標(Cursor) 模式,是行為型設計模式之一。迭代器模式源于對容器的訪問,比如 Java 中的 List、Map、數組等,我們知道對容器對象的訪問必然會涉及到遍歷算法,我們可以將遍歷的方法封裝在容器中,或者不提供便利方法。如果我們將便利方法封裝在容器中,那么對于容器來說承擔了過多的功能,容器類不僅要維護自身內部的數據元素而且還要對外提供遍歷的接口方法,因為遍歷狀態的存儲問題還不能對同一個容器同時進行多個便利操作,如果我們不提供便利方法而讓使用者自己去實現,又會讓容器內部細節暴露,因此,迭代器模式產生,在客戶訪問類與容器之間插入了一個第三者 - 迭代器,很好的解決了上述的弊端。
定義
提供一種方法順序訪問一個容器對象中的各個元素,而又不需要暴露該對象的內部表示。
使用場景
遍歷一個容器對象時
角色介紹
Iterator 迭代器接口,負責定義訪問和遍歷元素的接口,有 hasNext 和 next 兩個抽象方法
ConcreteIterator 具體迭代器類,主要實現迭代器接口,并記錄遍歷的當前位置
Aggregate 容器接口,負責 提供 創建具體迭代器角色的接口
ConcreteAggregate 具體容器類,實現創建迭代器角色的接口,創建具體的迭代器與該容器相關聯
Client 客戶端類
public interface Iterator<E> {
boolean hasNext();
E next();
}
public Interface Aggregate<E> {
Iterator<E> iterator;
}
使用泛型,這樣在列表中放入的元素確定之后,可以在放入非該類型元素的時候編譯不通過,而不是非要運行期才發現錯誤
Android 源碼中的迭代器模式
典型的例子就是數據庫查詢使用的 Cursor,該游標對象的實質就是一個具體的迭代器
優點
支持以不同的方式去遍歷一個容器對象,也可以有多個遍歷,弱化了容器類與遍歷算法直接的關系
缺點
類文件的增加