迭代器模式

定义:提供一种方法可以访问容器对象中的各个元素。而又不暴露该对象的内部细节。

类型:行为性模式

迭代器模式的结构

抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set等

具体容器:抽象容器的具体实现类。比如list的接口的有序表实现ArrayList,List接口的链表实现类LinkList,Set接口的哈希序列表的实现HashSet等。

抽象迭代器:定义遍历元素所需要的方法,一般来说会有这么三个方法:取得第一个元素的方法first(),取得下一个元素的方法next(),判断是否遍历结束的方法isDone()(或者叫hashNext()),移出当前方法的remove();

迭代器的实现:实现迭代器接口定义的方法,完成集合的迭代。

 

迭代器模式的特点:

简化了遍历方式,对于集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,单用户需要对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦了,而引入了迭代器模式后,用户的操作就简单多了

可以提供多重遍历方式,比如说对有序列表,我们可以根据需要提供正序遍历,倒序遍历两种迭代器,用户用起来只需要得到我们实现好的迭代器,就可以方便的对集合进行遍历了。

封装性良好,用户只需要得到迭代器就可以进行遍历。而对于遍历算法则不用去担心。

迭代器模式的缺点:

对于比较简单的遍历(像数组或者有序列表),使用迭代器方式遍历较为繁琐,大家可能都有感觉,像arrayList我们宁可愿意使用for循环和get方法来遍历集合。

迭代器模式使用的场景

迭代器模式是与集合共同生死的,一般来说,我们只需要实现一个集合,就需要同时提供这个集合的迭代器,就像java中的Collection,List,Set,Map等,这些集合都有自己的迭代器。假如我们要实现一个这样的新容器,当然也需要引入迭代器模式,给我们的容器实现一个迭代器。

但是由于容器和迭代器的关系太密切,所以我们大多数语言在实现容器的时候都提供了迭代器,并且这些语言提供的容器和迭代器在绝大多数情况下就可以满足我们的需要,所有我们需要我们自己去实现的迭代器模式的场景就比较少了,我们只需要使用语言中已有的容器和迭代器就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值