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

设计模式之迭代器模式

目录

  • 定义
  • 结构
  • 适用场景
  • 使用示例

定义

       迭代器模式将集合对象的遍历行为抽象为独立的迭代器对象,通过统一的接口(如 hasNext()、next())实现元素访问,使客户端无需关心底层数据结构。本质是分离集合的迭代逻辑与业务逻辑,实现‌遍历算法与数据结构的解耦‌,提升代码复用性和扩展性。

结构

在这里插入图片描述

适用场景

       1)‌隐藏复杂数据结构。当集合内部采用树、图等复杂结构时,迭代器封装遍历细节,简化客户端调用‌。
       2)‌统一遍历接口。需对多种集合(数组、链表、字典)执行相同操作时,提供一致的遍历方式‌。
       3)‌支持多种遍历方式。如正序、倒序、过滤遍历等,无需修改集合代码‌。
       4)‌跨集合操作。需同时遍历多个独立集合时(如合并查询),迭代器提供统一入口。

使用示例

/*** 统一迭代器接口* @param <T>*/
public interface Iterator<T> {boolean hasNext();T next();
}
/*** 统一集合接口* @param <T>*/
public interface Container<T> {Iterator<T> createIterator();}
/*** 数组集合实现*/
public class ArrayCollection implements Container<String> {private String[] items;public ArrayCollection(String[] items) {this.items = items;}@Overridepublic Iterator<String> createIterator() {return new ArrayIterator();}private class ArrayIterator implements Iterator<String> {private int index = 0;@Overridepublic boolean hasNext() {return index < items.length;}@Overridepublic String next() {return items[index++];}}
}
/*** 链表集合实现*/
public class ListCollection implements Container<String> {private List<String> items;public ListCollection(List<String> items) {this.items = items;}@Overridepublic Iterator<String> createIterator() {return new ListIterator();}private class ListIterator implements Iterator<String> {private int index = 0;@Overridepublic boolean hasNext() {return index < items.size();}@Overridepublic String next() {return items.get(index++);}}
}

       测试

import java.util.Arrays;public class Client {public static void printAll(Iterator<String> iterator) {while(iterator.hasNext()) {System.out.println(iterator.next());}}public static void main(String[] args) {String[] firstAggregate = new String[]{"语文", "数学", "物理", "化学", "英语"};Container<String> array = new ArrayCollection(firstAggregate);Container<String> list = new ListCollection(Arrays.asList("毛泽东", "秦始皇", "汉武帝", "隋文帝", "朱元璋", "刘邦", "唐太宗"));System.out.println("数组集合遍历:");printAll(array.createIterator());System.out.println("\n链表集合遍历:");printAll(list.createIterator());}}
http://www.xdnf.cn/news/15034.html

相关文章:

  • 基于改进多目标优化算法的众包物流配送调度研究
  • 【机器学习笔记Ⅰ】2 线性回归模型
  • 百度文心大模型 4.5 开源深度测评:技术架构、部署实战与生态协同全解析
  • 编程语言艺术:C语言中的属性attribute笔记总结
  • bro code笔记 inheritance
  • 从前端转nest.js开发的学习路线
  • 【Guava】1.0.设计虚拟机的方向
  • java学习——guava并发编程练习
  • Redis ①⑤-集群
  • Vue+Openlayers加载OSM、加载天地图
  • 周任务自动化升级:N8N与多维表格无缝联动全解析
  • 2025年03月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 【架构艺术】IC(个人贡献者)视角下产品研发规划的实战Tips
  • 一次内存“卡顿”全流程实战分析:从制造问题到优化解决
  • java中,stream的filter和list的removeIf筛选速度比较
  • JMM--数据原子操作
  • SpringAI与智能体入门
  • 解决kali Linux在VMware中的全局缩放问题
  • 量化可复用的UI评审标准(试验稿)
  • Python PyJWT详解:从入门到实战
  • 3dmax烘焙插件3dmax法线贴图烘焙教程glb和gltf元宇宙灯光效果图烘焙烘焙光影贴图支持VR渲染器
  • 针对工业触摸屏维修的系统指南和资源获取途径
  • NumPy-核心函数np.matmul()深入解析
  • CppCon 2018 学习:Surprises In Object Lifetime
  • 设计模式之访问者模式
  • 使用Langchain访问个人数据
  • SpringBoot系列—入门
  • PostgreSQL表操作
  • 深度学习5(深层神经网络 + 参数和超参数)
  • C++ 网络编程(15) 利用asio协程搭建异步服务器