迭代器模式

在软件开发中,我们经常需要使用聚合对象(集合)来存储一系列数据。聚合对象拥有两个职责:一是存储数据;二是遍历数据。从依赖性来看,前者是聚合对象的基本职责;而后者既是可变化的,又是可分离的。因此,可以将遍历数据的行为从聚合对象中分离出来,封装在一个被称之为“迭代器”的对象中,由迭代器来提供遍历聚合对象内部数据的行为,这将简化聚合对象的设计,更符合“单一职责原则”的要求。

迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。


聚合类可以看做迭代器的工厂,提供了迭代器的创建方法。

一个迭代器的典型代码如下:

interface Iterator {

    public void first(); //将游标指向第一个元素

    public void next(); //将游标指向下一个元素

    public boolean hasNext(); //判断是否存在下一个元素

    public Object currentItem(); //获取游标指向的当前元素

}

为了能够让迭代器可以访问到聚合对象中的数据,具体迭代器中需要维持一个对具体聚合对象的引用。除了使用关联关系外,我们还可以将迭代器类设计为聚合类的内部类,JDK中的迭代器类就是通过这种方法来实现的,在JDK中,Collection接口和Iterator接口充当了迭代器模式的抽象层,分别对应于抽象聚合类和抽象迭代器,而Collection接口的子类充当了具体聚合类。以List为例:


迭代器模式的主要优点如下:

      (1) 它支持以不同的方式遍历一个聚合对象,在同一个聚合对象上可以定义多种遍历方式。在迭代器模式中只需要用一个不同的迭代器来替换原有迭代器即可改变遍历算法,我们也可以自己定义迭代器的子类以支持新的遍历方式。

      (2) 迭代器简化了聚合类。


————————————————

版权声明:本文为CSDN博主「LoveLion」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/lovelion/article/details/9992931

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【学习难度:★★★☆☆,使用频率:★★★★★】直接出处:迭代器模式梳理和学习:https://github.com...
    BruceOuyang阅读 5,238评论 2 1
  • 目录 本文的结构如下: 引言 什么是迭代器模式 模式的结构 典型代码 代码示例 优点和缺点 适用环境 模式应用 一...
    w1992wishes阅读 3,505评论 0 1
  • 本文学习新的行为性设计模式,迭代器模式:它用来遍历集合对象。不过,很多编程语言都将迭代器作为一个基础的类库,直接提...
    舍是境界阅读 1,124评论 0 1
  • 迭代器模式 案例 最近张三在书店上班,老板有着两家书店。一天老板让他把书店 A 和书店 B 中存放的书籍罗列出来。...
    Phoegel阅读 1,813评论 0 0
  • 介绍 迭代器模式在我们日常编程中使用非常频繁,像list、map、数组等都会用到迭代器模式。迭代器模式属于行为型模...
    东西的南北阅读 1,618评论 0 1