• 行为型模式-迭代器模式


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

     

  • 相关阅读:
    testNG 注解使用说明
    jenkins 生成HTML报表,邮件推送
    Jenkins 邮件发送
    Jenkins+SVN+Maven+testNG管理项目
    SVN 安装教程
    大数据笔记(十一)——倒排索引
    大数据笔记(十)——Shuffle与MapReduce编程案例(A)
    大数据笔记(九)——Mapreduce的高级特性(B)
    大数据笔记(八)——Mapreduce的高级特性(A)
    大数据笔记(七)——Mapreduce程序的开发
  • 原文地址:https://www.cnblogs.com/suiyilaile/p/10150525.html
Copyright © 2020-2023  润新知