迭代器模式
今天说一个 迭代器模式,这个是我们平时用的最多的模式
因为java 的Collection 用的就是迭代模式。
先看看如果不用迭代模式,写代码可能有怎么样的效果。
如果你有一个List a = new ArrayList<>() 或者 a= new LinkedList<>();
那么对于这个集合,你遍历的时候,你可能需要判断
if(a instanceof ArrayList) 使用 for 循环。
如果 a instanceof LinkedList 使用 指针遍历。
那么对于client来说,遍历的逻辑就是不一致的,你要写丑陋的 if else 语句。
如果未来增加一个新的 collection 的实现,可能还要修改代码。
于时,java 使用了迭代器模式。
Collection extends Iterable 接口
Iterable 接口有一个方法就是
Iterator iterate();
每一个 Iterable接口都需要返回一个 Iterator的接口。
这个 Iterator 接口 里面 包含了
hasNext, next 等方法。
就是我们在操作集合对象时经常使用的。
那么我回过头来看看, ArrayList,LinkedList, 他们都实现了 Collection 接口
也就实现了 Iterable接口。
对于 ArrayList 他的 Iterator 采用了for 循环的方式。
对于 LinkedList Iterator 采用了 指针遍历的方式。
这个设计模式的精髓就是 把 遍历的逻辑用通用的接口封装,相应的代码都高类聚在一块。
在java collection 大行其道的今天,可能我们很少会用到Iterator模式了。
但是说不定,哪天,我们需要自己封装复杂的集合,并且遍历这些集合呢?
这个时候该模式就可以派上用场。
我们的目的,是没有重复的代码 和重复的逻辑。