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


    简介

    迭代器设计模式(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 接口则是抽象迭代器接口。

  • 相关阅读:
    跟HR在大群吵架是什么体验?
    深入学习 Redis Cluster - 集群是啥,数如何理解据分片算法
    面试官:你确定Redis是单线程的进程吗?
    设备接入服务组件->微服务and容器化改造说明文档
    BLEMotion-Kit 开发环境搭建&评估板程序下载
    微机-------可编程并行接口8255A
    从裸机启动开始运行一个C++程序(十一)
    相似图像识别算法是什么,机器图像识别常用算法
    机器学习入门教学——损失函数(交叉熵法)
    基于JAVA校园点餐系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  • 原文地址:https://www.cnblogs.com/fatedeity/p/16790480.html