Java设计模式之迭代器模式

定义

提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。

结构

迭代器模式主要包含以下角色:

  • 抽象聚合角色:定义存储、添加、删除聚合元素以及创建迭代器对象的接口。
  • 具体聚合角色:实现抽象聚合类,返回一个具体迭代器的实例。
  • 抽象迭代器角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、next() 等方法。
  • 具体迭代器角色:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。

案例

抽象聚合类

public interface StudentAggregate {//添加元素void addStudent(Student student);//删除元素void deleteStudent(Student student);//创建迭代器对象ConcreteIterator getIterator();
}

 具体聚合类

public class ConcreteAggregate implements StudentAggregate{private List<Student> list =new ArrayList<>();@Overridepublic void addStudent(Student student) {list.add(student);}@Overridepublic void deleteStudent(Student student) {list.remove(student);}@Overridepublic ConcreteIterator getIterator() {return new ConcreteIterator(list);}
}

抽象迭代器 

public interface StudentIterator {boolean hasNext();Student next();
}

 具体迭代器类

public class ConcreteIterator implements StudentIterator {private List<Student> list = new ArrayList<>();private int index = 0;public ConcreteIterator(List<Student> list) {this.list = list;}@Overridepublic boolean hasNext() {return index < list.size();}@Overridepublic Student next() {Student student = list.get(index);index++;return student;}
}

 载体

public class Student {private String name;private String Id;public Student(String name, String id) {this.name = name;Id = id;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", Id='" + Id + '\'' +'}';}
}

 测试

public class Client {public static void main(String[] args) {ConcreteAggregate concreteAggregate = new ConcreteAggregate();concreteAggregate.addStudent(new Student("张三","NO1"));concreteAggregate.addStudent(new Student("李四","NO2"));concreteAggregate.addStudent(new Student("王五","NO3"));ConcreteIterator iterator = concreteAggregate.getIterator();while(iterator.hasNext()){Student currentStudent = iterator.next();System.out.println(currentStudent.toString());}}
}

Student{name='张三', Id='NO1'}

Student{name='李四', Id='NO2'}

Student{name='王五', Id='NO3'}

JDK源码解析

JDK中的Iterator实现

查看ArrayList源码,由上图可以看出ArrayList内存在一个内部类Itr实现了抽象迭代接口,重写了hasNext与next方法。而ArrayList提供了iterator方法返回Iterator对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/185351.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot vue mysql的在线拍卖系统 全套代码 全套文档

基于SpringBoot的在线拍卖系统,springboot vue mysql (毕业论文10168字以上,共34页,程序代码,MySQL数据库) 代码下载链接&#xff1a;https://pan.baidu.com/s/104LjKF7kvhYeooSBk9h65g?pwd8fk4 提取码&#xff1a;8fk4 【运行环境】 IDEA, JDK1.8, Mysql, Node, Vue 【技…

Python实用技巧:将 Excel转为PDF

将Excel文件转换为PDF可以方便储存表格数据&#xff0c;此外在打印或共享文档时也能确保表格样式布局等在不同设备和操作系统上保持一致。今天给大家分享一个使用第三方Python库Spire.XLS for Python 实现Excel转PDF的简单方法。 实现步骤 首先&#xff0c;通过pip命令来安装依…

Visual Studio 2022 + OpenCV 4.5.2 安装与配置教程

目录 OpenCV的下载与配置Visual Studio 2022的配置新建工程新建文件新建项目属性表环境配置测试先写一个输出将OpenCV的动态链接库添加到项目的 x64 | Debug下测试配置效果 Other OpenCV的下载与配置 参考这个OpenCV的下载与环境变量的配置&#xff1a; Windows10CLionOpenCV4…

2023_11_6 每日半小时 SQL 刷题

文章目录 1. 查询所有列题目描述SQL 语句编写 2. 查询多列题目描述SQL 语句编写 3. 查询结果去重题目描述SQL 语句编写 4. 查询结果限制返回行数题目描述SQL 语句编写 5. 将查询后的列重新命名题目描述SQL 语句编写 语法小总结 1. 查询所有列 题目链接&#xff1a;SQL1 查询所…

Leetcode543. 二叉树的直径

Every day a Leetcode 题目来源&#xff1a;543. 二叉树的直径 解法1&#xff1a;深度优先搜索 首先我们知道一条路径的长度为该路径经过的节点数减 1&#xff0c;所以求直径&#xff08;即求路径长度的最大值&#xff09;等效于求路径经过节点数的最大值减 1。 而任意一条…

开发知识点-Pygame

Pygame Pygame最小开发框架与最小游戏游戏开发入门单元开篇 Pygame简介安装游戏开发入门语言开发工具的选择 Pygame最小开发框架与最小游戏 游戏开发入门单元开篇 Pygame简介安装 游戏开发入门语言开发工具的选择

【Android】Dagger2 框架设计理念和使用方式详解

文章目录 Dagger 框架作用基本使用方法引入依赖创建 Object创建 Module创建 Component向 Activity 注入对象 Component 内部单例全局单例自定义 Scope关于单例作用域的理解注入多种同类型对象Component 依赖Component 继承传递 Activity Dagger 框架作用 这里&#xff0c;我们…

山西电力市场日前价格预测【2023-11-09】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-09&#xff09;山西电力市场全天平均日前电价为369.84元/MWh。其中&#xff0c;最高日前电价为784.47元/MWh&#xff0c;预计出现在17: 45。最低日前电价为158.90元/MWh&#xff0c;预计…

物联网水表有什么弊端吗?

物联网水表作为新一代智能水表&#xff0c;虽然在很大程度上提高了水资源的管理效率&#xff0c;但也存在一定的弊端。在这篇文章中&#xff0c;我们将详细讨论物联网水表的弊端&#xff0c;以帮助大家更全面地了解这一技术。 一、安全隐患 1.数据泄露&#xff1a;物联网水表通…

分布式数据库·Hive和MySQL的安装与配置

一、版本要求&#xff1a;Hadoop:hadoop-2.10.1、MySQL&#xff1a;mysql-8.0.35、 HIVE&#xff1a;apache-hive-3.1.2、MySQL驱动&#xff1a;mysql-connector-java-5.1.49 安装包网盘链接&#xff1a;阿里云盘分享 安装位置 Hive:master、MySQL:slave1 二、卸载已安装的…

人工智能辅助职业教育发展——开启教育新时代

人工智能辅助职业教育发展——开启教育新时代 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;逐渐渗透到各行各业&#xff0c;并在许多领域发挥着重要作用。如今&#xff0c;AI的应用已经延伸到职业教育领域&#xff0c;为培养高素质人才提供了新的可能和动…

矩阵等价和向量组等价的一些问题

什么是向量组&#xff1f;答&#xff1a;向量组是由若干同维数的列向量&#xff08;或同维数的行向量&#xff09;组成的集合。什么是向量组等价&#xff1f;答&#xff1a;两个向量组&#xff0c;各自拼成矩阵A和B&#xff0c;向量组等价就是三秩相等&#xff0c;即r&#xff…

如何开发一个求职招聘小程序?详细步骤解析与教程

一、确定需求和功能 在开发求职招聘小程序之前&#xff0c;需要明确需求和功能。通过对市场和用户需求的调研和分析&#xff0c;确定小程序需要具备哪些功能&#xff0c;如职位发布、简历投递、在线沟通、面试安排等。 二、选择开发方式 求职招聘小程序的开发方式有多种选择…

智能井盖传感器功能,万宾科技产品介绍

在国家治理方面&#xff0c;对社会的治理是一个重要的领域&#xff0c;一定要在推进社会治理现代化过程中提高市政府的管理和工作能力&#xff0c;推动社会拥有稳定有序的发展。在管理过程中对全市井盖进行统一化管理&#xff0c;可能是市政府比较头疼的难题&#xff0c;如果想…

JAVA IDEA 下载

超简单步骤一&#xff1a; IntelliJ IDEA 官方下载链接 点击以上链接进入下图&#xff0c;点击下载 继续点下载&#xff0c;然后等待下载完后打开安装包即可 步骤二&#xff1a; 打开下好的安装包&#xff0c;点击Browse...我们把它下载到自己喜欢的地方&#xff08;主要是别占…

电脑出现“此驱动器存在问题请立即扫描”该怎么办?

在您将可移动设备&#xff08;例如&#xff1a;U盘、移动硬盘&#xff09;连接到计算机时&#xff0c;您可能会收到一条错误消息“此驱动器存在问题请立即扫描并修复问题”。收到此错误消息后&#xff0c;您的设备在大多数情况下将无法访问。那么&#xff0c;电脑出现“此驱动器…

达梦SQL语法兼容笔记

1. DDL工具语法 查看库和表列表 # 查看所有数据库 select distinct object_name from all_objects where object_typeSCH; # 查看所有可见的表名&#xff1a; SELECT table_name FROM all_tables; # 查看用户可见的所有表 SELECT table_name FROM all_tables WHERE owner s…

家用AIO系统架构图(Openwrt 群晖 IPV6 DDNS)

折腾几个月了&#xff0c;摸索出的最合适的系统架构。其余的系统架构也都行得通&#xff0c;但是从逻辑角度&#xff0c;下列方案更加的自然通顺。 系统架构图 疑问解答 为什么用IPV6? 2222年了都不会真有人能从运营商哪里搞到ipv4或者还没有ipv6吧。 光猫为什么桥接? 抠门运…

【LeetCode刷题日志】160.相交链表

&#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;C/C领域新星创作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;LeetCode 刷题日志&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;…

将对象与返回的数据所对应的键相同时一一赋值

问题描述 对象与返回的数据直接赋值&#xff0c;会将多余的键与值也添加上 那么赋值时值要 目标对象的键所对应的值 解决方案&#xff1a; 利用双重遍历 来比对 当 键相同时再赋值 duiYingFuZhi(obj,data){for (let key in obj) {for (let index in data) {if (keyindex) {obj…