行为型模式-迭代器模式
Posted suiyilaile
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了行为型模式-迭代器模式相关的知识,希望对你有一定的参考价值。
参考:https://www.jianshu.com/p/f4917cb02752
1.定义
提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
2.介绍
- 迭代器模式属于行为型模式。
- 迭代器(Iterator)模式,又叫做游标(Cursor)模式。
- Java中的Map、List等等容器,都使用到了迭代器模式。
3.UML类图
角色说明:
- Iterator(迭代器接口):负责定义、访问和遍历元素的接口。
- ConcreteIterator(具体迭代器类):实现迭代器接口。
- Aggregate(容器接口):定义容器的基本功能以及提供创建迭代器的接口。
- ConcreteAggregate(具体容器类):实现容器接口中的功能。
- Client(客户端类):即要使用迭代器模式的地方。
4.实现
继续以快递举例子,货架上有很多快递包,取快递时我们报出手机号,然后快递小哥就遍历货架上所有的快递信息,直到找出快递包为止:
5. 应用场景
- 遍历一个容器对象时。
- 实际我们开发中很少使用到迭代器模式。虽然不怎么用得到,但是了解其原理能够让我们在看到相关的源码(如Java中的Map、List等等容器)时能够更容易了解源码的相关思想。
6. 优点
- 可以支持以不同的方式去遍历容器对象,如顺序遍历,逆序遍历等等。
- 符合单一职责原则,容器类与遍历算法的分离,不同类负责不同的功能。
7. 缺点
- 会产生多余的对象,消耗内存。
- 会增多类文件。
- 遍历过程是一个单向且不可逆的遍历。
- 遍历过程需要注意容器是否改变,若期间改变了,可能会抛出异常。
8. android中的源码分析
8.1 使用Cursor
除了Java中的Map、List等有用到迭代器模式之外,Android中使用数据库查询时返回的Cursor游标对象,实际上就是使用了迭代器模式来实现。
以上是关于行为型模式-迭代器模式的主要内容,如果未能解决你的问题,请参考以下文章