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

23种设计模式-行为型模式之迭代器模式(Java版本)

Java 迭代器模式(Iterator Pattern)详解

🧠 什么是迭代器模式?

迭代器模式是一种行为型设计模式,它提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露该对象的内部表示。


🎯 使用场景

  • 遍历集合对象(如 List、Set、Map)
  • 需要统一不同容器的遍历方式
  • 不希望暴露集合内部结构

🏗️ 模式结构

  • Iterator(迭代器接口):定义访问和遍历元素的接口
  • ConcreteIterator(具体迭代器):实现迭代器接口,记录遍历状态
  • Aggregate(聚合接口):创建迭代器对象
  • ConcreteAggregate(具体聚合类):实现聚合接口,返回具体迭代器

✅ 示例:自定义聚合对象

迭代器接口

public interface Iterator<E> {boolean hasNext();E next();
}

聚合接口

public interface Aggregate<E> {Iterator<E> createIterator();
}

具体聚合类

import java.util.ArrayList;
import java.util.List;public class NameRepository implements Aggregate<String> {private List<String> names = new ArrayList<>();public NameRepository() {names.add("Tom");names.add("Jerry");names.add("Alice");}@Overridepublic Iterator<String> createIterator() {return new NameIterator();}private class NameIterator implements Iterator<String> {private int index = 0;@Overridepublic boolean hasNext() {return index < names.size();}@Overridepublic String next() {return hasNext() ? names.get(index++) : null;}}
}

客户端使用

public class Main {public static void main(String[] args) {NameRepository repo = new NameRepository();Iterator<String> iterator = repo.createIterator();while (iterator.hasNext()) {System.out.println("Name: " + iterator.next());}}
}

✅ 优点

  • 封装集合遍历细节
  • 支持多种遍历方式
  • 遵循单一职责原则(遍历与集合解耦)

⚠️ 缺点

  • 每种集合都需要实现迭代器,增加代码量
  • 不支持逆向遍历(需扩展接口)

🧩 使用建议

Java 中已有内置迭代器(如 Iterator<T> 接口),但理解其设计思想有助于掌握设计模式的解耦思想与开放封闭原则。

相关文章:

  • Redis数据结构SDS,IntSet,Dict
  • 【读论文】面向小目标的轻型变电设备缺陷检测算法
  • Python文件操作及数据库交互(Python File Manipulation and Database Interaction)
  • cron定时任务
  • element ui el-col的高度不一致导致换行
  • 论文阅读:2024 arxiv HybridFlow: A Flexible and Efficient RLHF Framework
  • x修改ssh版本号9.9可以躲过漏洞扫描器扫描
  • 精通线程池:业务场景中的实践、优化与监控
  • Java 面向对象编程:封装及其各种用法详解
  • 工业摄像头通过USB接口实现图像
  • A. Everybody Likes Good Arrays!
  • 视频转gif在线工具-免费快捷
  • 如何创建成员内部类数组
  • 硬件工程师面试常见问题(8)
  • SQL语法基础,进阶,高级sql语句学习
  • 山东大学软件学院项目实训-基于大模型的模拟面试系统-网页图片显示问题
  • Hutool TreeUtil快速构建树形数据结构
  • 简易版2D我的世界C++程序(有点BUG,但是可以玩!!!)
  • 教育领域的AIGC革命:构建多模态智能教学系统
  • Java 安全:如何保护敏感数据?
  • 戴昕谈隐私、数据、声誉与法律现实主义
  • 大漠孤烟为何“直”?物理学家在唐诗中读出“不一样的美”
  • 体坛联播|巴萨“三杀”皇马夺国王杯,陈妤颉破亚洲少年纪录
  • 江西省宁都县政协原二级调研员谢亦礼被查
  • 日均新开三家“首店”,上海的“首发经济”密码是什么?
  • 我驻美使馆:中美并没有就关税问题磋商谈判,更谈不上达成协议