行为型模式-迭代器模式

参考: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游标对象,实际上就是使用了迭代器模式来实现。

 

原文地址:https://www.cnblogs.com/suiyilaile/p/10150525.html