• 初识设计模式 - 迭代器模式


    简介

    迭代器设计模式(Iterator Design Pattern),也叫作游标设计模式(Cursor Design Pattern)。

    迭代器模式将集合对象的遍历操作从集合类中拆分出来,放到迭代器类中,让两者的职责更加单一。

    其定义是,提供一种方法来访问聚合对象,而不暴露这个对象的内部实现。

    典型实现

    首先,定义一个用于遍历聚合对象中所存储元素的抽象迭代器接口,其代码示例如下:

    public interface Iterator {
    // 将游标指向第一个元素
    public void first();
    // 将游标指向下一个元素
    public void next();
    // 判断是否存在下一个元素
    public boolean hasNext();
    // 获取游标指向的当前元素
    public Object currentItem();
    }

    然后,我们通常将存储数据的类称作为聚合类,一般会在聚合类中创建迭代器对象,如下是抽象聚合接口的代码示例:

    public interface Aggregate {
    public Iterator creteIterator();
    }

    在具体迭代器类中,我们需要注入聚合对象,以便后续使用迭代器时能访问到其数据,其代码示例如下:

    public class ConcreteIterator implements Iterator {
    private Aggregate objects;
    private Object cursor;
    public ConcreteIterator(Aggregate objects) {
    this.objects = objects;
    }
    // 将游标指向第一个元素
    public void first() {}
    // 将游标指向下一个元素
    public void next() {}
    // 判断是否存在下一个元素
    public boolean hasNext() {}
    // 获取游标指向的当前元素
    public Object currentItem() {}
    }

    在具体聚合类中,通常是实现存储数据的逻辑,以及指定具体迭代器的对象,其代码示例如下:

    public class ConcreteAggregate implements Aggregate {
    public Iterator creteIterator() {
    return new ConcreteIterator(this);
    }
    }

    总结

    优点

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

    • 封装性良好,访问一个聚合对象的内容而无需暴露它的内部实现
    • 将遍历操作交给迭代器,简化了复杂聚合类的设计
    • 支持以不同的方式遍历聚合对象,在同一个聚合对象上可以定义多种遍历方式
    • 增加新的聚合类和迭代器类都很方便,满足开闭原则

    缺点

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

    • 迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加
    • 抽象迭代器的设计难度较大,需要充分考虑系统将来的扩展

    适用场景

    迭代器模式的适用场景如下:

    • 访问一个聚合对象的内容而无需暴露它的内部实现
    • 需要为一个聚合对象提供多种遍历方式
    • 为遍历不同的聚合对象提供一个统一的接口

    源码

    在 Java 中,迭代器的应用非常广。

    最顶层的 Collection 集合接口继承了 Iterable 接口,其实表明了所有的集合对象都是可迭代对象,并且都需要实现获取 Iterator 对象的方法。

    将这个源码映射到典型实现中,Iterable 接口和 Collection 接口就是抽象聚合接口,Iterator 接口则是抽象迭代器接口。

  • 相关阅读:
    【Linux修炼】8.进程概念
    学之思开源考试系统部署至Centos7
    导航基础知识
    1、如何抓取Modbus TCP/UDP 数据包实战
    C专家编程 第5章 对链接的思考 5.4 警惕Interpositioning
    QTableWidget 使用方法
    Elasticsearch:使用 Filebeat 从 Node.js Web 应用程序提取日志
    通过实例讲清楚MongoDB九种聚合操作
    计算机网络八股文
    PC电脑可以当服务器使用吗?
  • 原文地址:https://www.cnblogs.com/fatedeity/p/16790480.html