迭代器模式,属于行为型模式,提供一种方法顺序访问聚合对象的各个元素,而不暴漏该对象的内部表示。
这句话理解起来很容易,在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等等)