Java设计模式之-迭代器模式(Iterator)

迭代器这个名词对于熟悉Java的人来说绝对不陌生。我们常常使用JDK提供的迭代接口进行java collection的遍历:

Iterator it = list.iterator();
while(it.hasNext()){
    Object obj = it.next();
    ......
}

其实这就是在Java语言中完美的迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。

Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.

我们来看一下迭代器模式的UML类图:


Java设计模式之-迭代器模式(Iterator)_第1张图片
迭代器模式
  1. 迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。
  2. 具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。
  3. 容器角色(Container):容器角色负责提供创建具体迭代器角色的接口。
  4. 具体容器角色(Concrete Container):具体容器角色实现创建具体迭代器角色的接口——这个具体迭代器角色于该容器的结构相关。

一般在Java中,我们有很多集合类来代表Aggregate角色,如ArrayList、LinkedList等,而这些集合类已经实现了Iterator接口。

总地来说,迭代器模式就是分离了集合对象的迭代行为,抽象出一个迭代器类来负责,这样既可做到不暴露集合的内部结构,又可以让外部代码可以透明的访问集合内部的元素。迭代器模式在访问数组、集合、列表等数据时,尤其是数据库数据操作时,是非常普遍的应用,但由于它太普遍了,所以各种高级语言都对他进行了封装,所以反而给人感觉此模式本身不太常用了。今天我们就不在这个上面再花时间进行代码的编写,大家有兴趣可以直接看一下JDK中相关的代码,能够学到很多。

加油!

你可能感兴趣的:(Java设计模式之-迭代器模式(Iterator))