当前位置: 首页 > article >正文

行为型模式-迭代器模式

迭代器模式(Iterator Pattern)是一种行为型设计模式,主要用于提供一种方法顺序访问一个聚合对象中的各个元素,而不需要暴露其内部表示。这个模式常被用于集合类对象(如列表、数组、图等)的实现中。

模式结构

迭代器模式包括以下几个核心角色:

  • 迭代器接口(Iterator)
    定义访问和遍历元素的接口,一般包括:
    • hasNext():判断是否还有下一个元素。
    • next():返回下一个元素。
    • remove()(可选):移除当前元素。
  • 具体迭代器(Concrete Iterator)
    实现迭代器接口,维护遍历的状态(如当前位置),负责实际遍历操作。
  • 聚合接口(Aggregate)
    定义创建迭代器的接口,一般包括:
    • createIterator():返回一个具体迭代器实例。
  • 具体聚合(Concrete Aggregate)
    实现聚合接口,提供存储和管理元素的功能,并返回具体迭代器。

优缺点

  • 优点
    封装性:迭代器将遍历的实现从集合中分离出来,不暴露集合的内部结构。
    多样性:可以为不同的集合设计不同的迭代方式(如顺序迭代、反向迭代)。
    一致性:为不同集合提供统一的遍历接口,方便调用。
  • 缺点
    开销增加:增加了类的数量和复杂性,尤其是需要为每种聚合都设计一个具体迭代器时。
    不适合简单集合:对于非常简单的集合,直接遍历更高效。
    适用场景
    需要访问一个集合对象,而无需了解其底层实现。
    需要以不同方式遍历集合。
    需要为一个集合提供多种遍历方式。

示例代码

复制代码
// 迭代器接口
interface Iterator<E> {
    boolean hasNext();
    E next();
}

// 聚合接口
interface Aggregate<E> {
    Iterator<E> createIterator();
}

// 具体聚合
class ConcreteAggregate<E> implements Aggregate<E> {
    private List<E> items = new ArrayList<>();

    public void addItem(E item) {
        items.add(item);
    }

    @Override
    public Iterator<E> createIterator() {
        return new ConcreteIterator<>(items);
    }
}

// 具体迭代器
class ConcreteIterator<E> implements Iterator<E> {
    private List<E> items;
    private int position = 0;

    public ConcreteIterator(List<E> items) {
        this.items = items;
    }

    @Override
    public boolean hasNext() {
        return position < items.size();
    }

    @Override
    public E next() {
        return hasNext() ? items.get(position++) : null;
    }
}

// 测试
public class IteratorPatternDemo {
    public static void main(String[] args) {
        ConcreteAggregate<String> aggregate = new ConcreteAggregate<>();
        aggregate.addItem("A");
        aggregate.addItem("B");
        aggregate.addItem("C");

        Iterator<String> iterator = aggregate.createIterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

实际应用

Java 中的集合框架(如 ArrayList、HashMap)都实现了迭代器模式,提供 Iterator 接口来遍历集合。
数据库游标(Cursor)也是迭代器模式的一个应用。


http://www.kler.cn/a/414811.html

相关文章:

  • 机器学习-----变色龙算法(Chameleon Algorithm)
  • 使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)
  • 分布式搜索引擎之elasticsearch单机部署与测试
  • 【漏洞复现】|百易云资产管理运营系统/mobilefront/c/2.php前台文件上传
  • 微信小程序数据请求教程:GET与POST请求详解
  • Mybatis-基础操作
  • 【高等数学学习记录】微分中值定理
  • 网络传输介质
  • 怎么样才算得上熟悉高并发编程?
  • vue3【实战】自定义全局指令(含批量自动注册全局自定义指令,复制,防抖,节流,长按,水印,拖拽,打字机特效等)
  • git常用命令和问题
  • C++的依赖颠倒原则
  • C++ 【异步日志模块和std::cout << 一样使用习惯替代性好】 使用示例,后续加上远程日志
  • ABAP 快速入门之 Hello World 和 ALV 列表
  • 深度学习基本单元结构与输入输出维度解析
  • C语言根据字符串变量获取/设置结构体成员值
  • c++基础开发环境vscode+mingw-w64
  • 【Oracle11g SQL详解】WHERE 子句的条件筛选及常用操作符
  • Seata使用ZooKeeper作为注册中心
  • 【面向对象的程序设计——集合框架】主要接口
  • java charAt()返回数值型 详解
  • python之Flask入门—路由参数
  • 从数据孤岛到数据协同:企业如何构建安全的数据共享生态?
  • php 导出excel 带图片
  • 基于Matlab的图像去噪算法仿真
  • 用 llama.cpp 体验 Meta 的 Llama AI 模型