前言
本篇来讲讲迭代器模式。
正文
概念
迭代器模式属于行为型模式,这种模式用于顺序访问集合对象中的元素,但是没有暴露内部的表示。例如java中的iterator。
一般来讲迭代器模式中有以下几个角色:
- 迭代器(Iterator):抽象接口,一般来说有几个方法,next()取得下一个元素,hasNext()判断是否有下一个元素,remove()移除元素。
- 具体迭代器,即实现迭代器接口的具体类
- 容器角色(Aggregate/Container):也是个接口,一般有一个iterator()提供迭代器,java中有Collection,list,set等接口。
- 具体容器角色:即容器角色的实现类,如java中实现list的ArrayList等。
实现
我们来实现一个简单的迭代器。
先定义简单迭代器:
1 | public interface Iterator { |
之后定义容器接口,里面有一个getIterator获取迭代器。
1 | public interface Container { |
之后实现具体容器,使用内部类定义具体迭代器。
1 | public class keyRepository implements Container{ |
最后测试一下
1 | public class Main { |
优缺点
迭代器模式的优点在于简化了遍历的方式,对于数组或者列表我们还可以通过下标来获取对象,而如果对于一些无法通过下标获取对象的存储类型,我们就需要迭代器来顺序获取对象。其次我们可以实现多种遍历方式,如正序或者逆序。再者我们增加新的迭代器时无修修改原有的代码。
而缺点在于由于迭代器模式存储与遍历数据的方法是分开的,因此需要增加新的容器时就需要添加对应的迭代器类,增加复杂性。
总结
迭代器模式与容器是相互作用的,一般来说实现一个容器就要实现这个容器的迭代器,在java中的collection,list,set,map等都有它自己的迭代器。我们可以使用增强型for循环再配合迭代器进行遍历,十分方便。所以迭代器模式就是当我们需要实现一个新的容器时,就需要引入这个模式,来给这个容器提供一个迭代器。