行为型模式-迭代器模式

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

 

以上是关于行为型模式-迭代器模式的主要内容,如果未能解决你的问题,请参考以下文章

行为型模式-迭代器模式

设计模式——行为型模式之迭代器模式

20.(行为型模式)java设计模式之迭代器模式

Python 设计模式 — 行为型模式 — 迭代器模式

设计模式 行为型模式 -- 迭代器模式 JDK源码解析:ArrayList

行为型设计模式之迭代器模式