迭代器模式,屬于行為型模式,提供一種方法順序訪問聚合對象的各個元素,而不暴漏該對象的內部表示。
這句話理解起來很容易,在java中,可以理解為遍歷集合對象,集合里面的對象是什么我不去理會,反正我給你遍歷出來就行了。有人說這不就是java里面的Interator遍歷?或者是for()循環遍歷集合嗎?
是的,JDK中已經把集合和迭代器整合的非常到位了。所以我們可以直接使用迭代器Interator,不過呢,迭代器本身就是一種設計模式,這一節,學習目的大于了使用的目的。
UML圖:
aggregate:表示聚合(也可以叫做容器)的接口類,擁有獲取迭代器的方法(也可以不需要接口,直接使用實現)。
concreteAggregate:聚合接口的具體實現類,擁有獲取迭代器的方法。
Interator:迭代器接口類,(當然也可以不要,直接使用迭代器實現類)。
concreteInterator:迭代器實現類,擁有需要迭代的聚合對象(紅色部分)
這里面為什么需要把聚合和迭代器做成接口,不做借口其實照樣可以實現,不過,我們這里是為了更好地擴展,以后我們也可以添加多個聚合實現類和迭代器實現類。也符合我們設計模式的開閉原則,單一職責原則。
話不多說,直接上代碼:
迭代器接口類:
迭代器實現類(擁有需要迭代的聚合對象):
需要迭代的容器接口類:(擁有迭代器)
迭代器實現類:(擁有迭代器)
測試:
代碼其實很簡單,
Aggregate聚合對象,擁有自身的基本方法(添加方法,刪除方法等等),
interator對象,專門負責Aggregate的遍歷工作。
JDK中,幾乎所有的集合對象都擁有迭代器。
List(ArrayList,LinkedList等等)
Set(TreeSet,HashSet等等)
Map(HashMap,ConcurrentHashMap,LinkedHashMap等等)