背景
迭代就是遍历的一个过程,既然是遍历自然是无处不在,比如说,在大街上看美女的时候,总是一个也不放过,一个个尽收眼底,不过,说实话,夏天看美女,其实我是拒绝的,不说了,鼻血有要留出了
1、使用意图
遍历每一个对象
2、生活实例
公交车上的售票员查票,对每一个乘客都进行查票,验票。
3、Java 例子(框架、JDK 、JEE)
集合的顶层接口Collection就是实现了接口Iterable,他就是一个迭代器模式的封装,Iterable只有一个方法,Iterator<T> iterator(); 然而Iterator声明了对应迭代的方法,就是如下:
boolean hasNext();E next();void remove();
其实,我们不管是使用Map还是List,有时候都会去遍历是删除成员,这个时候迭代器是最好的,因为普通的For是不能在迭代中删除成员的。
4、模式类图
Aggregate:抽象成员角色,他就是遍历的对象成员
ConcreteAggregate:具体成员角色,对Aggregate的具体实现,其实聚集对象就是集合或说数组
Iterator:抽象迭代器,他声明迭代的工具方法
ConcreteIterator:具体迭代器,他实现迭代的工具方法,可以有各种不同的遍历实现
5、模式优点
迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。
当你需要对聚集对象有多种方式遍历时可以考虑使用迭代器模式。
为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。
迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合内部结构,又可以外部代码透明地访问集合内部数据
6、与类似模式比较
看完这个设计模式,感觉到迭代器模式神乎其神了,这个模式确实是无处不在啊,而且Java中for 循环就是一个体现,遍历是多样话的,但是迭代器模式确实就是当中一个原理。