java设计模式(二十)迭代器模式(Iterator Pattern)

1、模式介绍:

迭代器模式是一种行为设计模式,它允许客户端通过统一的方式访问聚合对象中的各个元素,而不必暴露其内部表示。通过迭代器模式,可以在不知道聚合对象内部结构的情况下,顺序访问其中的元素。

2、应用场景:

当需要访问一个聚合对象的内容而无需暴露其内部表示时,可以使用迭代器模式。这样客户端可以通过迭代器依次访问聚合对象中的元素。
当需要对聚合对象有多种遍历方式时,可以通过不同的迭代器实现类来实现不同的遍历策略。

3、优点:

分离了聚合对象的遍历行为,使得聚合对象的内部变化不会影响到客户端的遍历操作。
提供了一种统一的接口,客户端可以使用统一的方式遍历不同的聚合对象。

4、缺点:

增加了类的个数,因为每个聚合对象都需要一个对应的迭代器。
在某些情况下,使用迭代器可能会导致性能上的损失,因为迭代器模式在遍历过程中会增加额外的对象创建和方法调用。

5、代码示例:

/*** 迭代器接口*/
public interface IteratorPatternIterator<T> {boolean hasNext();T next();
}/*** 聚合接口*/
public interface Aggregate<T> {IteratorPatternIterator<T> createIterator();
}/*** 具体迭代器实现*/
public class ConcreteIterator<T> implements IteratorPatternIterator<T> {private List<T> elements;private int position;public ConcreteIterator(List<T> elements) {this.elements = elements;this.position = 0;}@Overridepublic boolean hasNext() {return position < elements.size();}@Overridepublic T next() {return elements.get(position++);}
}/*** 具体聚合实现*/
public class ConcreteAggregate<T> implements Aggregate<T> {private List<T> elements = new ArrayList<>();public void add(T element) {elements.add(element);}@Overridepublic IteratorPatternIterator<T> createIterator() {return new ConcreteIterator<>(elements);}
}/*** 实现*/
public class IteratorClient  {public static void main(String[] args) {ConcreteAggregate<String> aggregate = new ConcreteAggregate<>();aggregate.add("Item 1");aggregate.add("Item 2");aggregate.add("Item 3");IteratorPatternIterator<String> iterator = aggregate.createIterator();while (iterator.hasNext()) {String item = iterator.next();System.out.println("Item: " + item);}}
}

6、示例讲解:

IteratorPatternIterator 定义了迭代器的接口,包括 hasNext() 和 next() 方法。
Aggregate 定义了聚合对象的接口,其中包括 createIterator() 方法用于创建迭代器。
ConcreteIterator 是具体的迭代器实现,负责遍历 List 中的元素。
ConcreteAggregate 是具体的聚合对象实现,维护一个 List 来存储元素,并实现了 createIterator() 方法以生成对应的迭代器。
在 main 方法中,创建了一个具体的聚合对象 ConcreteAggregate,添加了一些元素,并使用迭代器依次访问这些元素并打印输出。

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

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

相关文章

elasticsearch 查询超10000的解决方案

前言 默认情况下&#xff0c;Elasticsearch集群中每个分片的搜索结果数量限制为10000。这是为了避免潜在的性能问题。 但是我们 在实际工作过程中时常会遇到 需要深度分页&#xff0c;以及查询批量数据更新的情况 问题&#xff1a;当请求form size >10000 时&#xff0c…

javascript设计模式总结

参考 通过设计模式可以增加代码的可重用性、可扩展性、可维护性 设计模式五大设计原则 单一职责&#xff1a;一个程序只需要做好一件事&#xff0c;如果结构过于复杂就拆分开&#xff0c;保证每个部分独立 开放封闭原则&#xff1a;对扩展开放&#xff0c;对修改封闭。增加需…

【FreeRTOS】IAR的FreeRTOSConfig.h中在添加头文件的问题

1、今天在\FreeRTOSConfig.h中添加个头文件&#xff0c;总是在头文件的函数定义处报错&#xff1a; Error[40]: Bad instruction 2、百度了半天也没有找到问题 3、原来是这个原因&#xff1a; IAR的Freertos中需加上一个portasm.s的驱动文件&#xff0c;而该文件需要调…

印尼Facebook直播网络需要达到什么要求?

在全球化浪潮的推动下&#xff0c;海外直播正受到企业、个人和机构的广泛关注和青睐。无论是用于营销、推广还是互动&#xff0c;海外直播为各种组织提供了更多机会和可能性。本文将探讨在进行印尼Facebook直播前&#xff0c;需要满足哪些网络条件以确保直播的质量和用户体验。…

南通网站制作基本步骤有哪些

南通网站制作是一个非常重要的工作&#xff0c;它可以帮助企业展示产品、服务和品牌形象&#xff0c;吸引更多的客户和创造更多的商机。网站制作的基本步骤包括需求分析、规划设计、页面制作、网站测试和上线等。 首先是需求分析。在南通网站制作的初期阶段&#xff0c;需要和客…

Spark SQL----CREATE FUNCTION

Spark SQL----CREATE FUNCTION 一、描述二、语法三、参数四、例子 一、描述 CREATE FUNCTION语句用于在Spark中创建临时或永久函数。临时函数的作用域位于会话级别&#xff0c;永久函数在持久目录中创建&#xff0c;并可用于所有会话。USING子句中指定的资源在第一次执行时可供…

批量提取PDF指定区域内容到 Excel , 根据PDF文件第一行文字来自动重命名v1.3-附思路和代码实现

本次文章更新内容&#xff0c;图片以及扫描的PDF也可以支持批量提取指定区域内容了&#xff0c;主要是通过截图指定区域&#xff0c;然后使用OCR来识别该区域的文字来实现的&#xff0c;所以精度可能会有点不够&#xff0c;但是如果是数字的话&#xff0c;问题不大&#xff1b;…

高级java每日一道面试题-2024年7月13日

面试官问: 你对序列化了解多少 我回答 1. 什么是序列化和反序列化 序列化&#xff1a;是指将对象的状态转换为字节流的过程&#xff0c;使得对象可以被存储或在网络中传输。反序列化&#xff1a;则是将字节流还原成对象的过程。 2. 目的和用途 **数据存储&#xff1a;**将…

一周年——相遇知音

——献给ZINCFFO 有梦便追&#xff0c;何惧&#xff1f; “杂乱无章”的代码片在昏暗的灯光下显得让人心生些许倦意。“我为什么天天都要练习呢&#xff1f;”无奈地合上笔记本电脑&#xff0c;当时多么想把电脑䣹&#xff08;fāi&#xff09;在地上&#xff0c;那就仿佛放下…

OpenGL笔记五之VBO与VAO

OpenGL笔记五之VBO与VAO 总结自bilibili赵新政老师的教程 code review! 文章目录 OpenGL笔记五之VBO与VAO1.VBO2.VAO3.VBO与VAO对比 1.VBO 代码 void prepareVBO() {//1 创建一个vbo *******还没有真正分配显存*********GLuint vbo 0;GL_CALL(glGenBuffers(1, &vbo))…

使用uni-app和Golang开发影音类小程序

在数字化时代&#xff0c;影音内容已成为人们日常生活中不可或缺的一部分。个人开发者如何快速构建一个功能丰富、性能优越的影音类小程序&#xff1f;本文将介绍如何使用uni-app前端框架和Golang后端语言来实现这一目标。 项目概述 本项目旨在开发一个个人影音类小程序&#…

Spring Boot 实现统一异常处理:构建健壮的应用

在Web应用开发中&#xff0c;异常处理是确保应用稳定性和用户体验的关键环节。Spring Boot以其便捷的配置和强大的生态系统&#xff0c;为开发者提供了统一处理异常的强大工具。本文将详细介绍如何在Spring Boot项目中实现统一的异常处理&#xff0c;以提升应用的健壮性和可维护…

微分方程建模

微分方程建模是数学建模的重要方法&#xff0c;因为许多实际问题的数学描述将导致求解微分方程的定解问题。在高教杯数学建模竞赛中每年都会有一道微分方程建模问题&#xff0c;大体上可以按以 下几步&#xff1a; 1. 根据实际要求确定要研究的量(自变量、未知函数、必要的参数…

云盘挂载 开机自动模拟 cmd- alist server

云盘挂载 开机自动模拟 cmd- alist server 打开Kimi智能助手, 网址:Kimi.ai - 帮你看更大的世界 (moonshot.cn) 问他: 帮我写一个vbs命令:在D:\sky目录下, 然后cmd, 进入命令行后, 输入 alist server 然后回车 这里 这个目录, 换成自己的 alist.exe所在目录 下面是我完善的示…

GitHub连接超时问题 Recv failure: Connection was reset

用手机热点WIF拉取git项目的时候&#xff0c;遇到Recv failure: Connection was reset问题。 解决办法 一、手动开启本地代理 二、在终端&#xff08;cmd&#xff09;输入命令 git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy https:…

大模型-基于大模型的数据标注

法来自于这篇论文&#xff1a;Can Generalist Foundation Models Outcompete Special-Purpose Tuning? Case Study in Medicine。 一.背景 假设&#xff0c;存在一批标注好的数据D_labeled&#xff0c;其包含m个标注样本(x, y)。 目标是&#xff0c;基于D_labeled&#xff…

Linux安全技术与防火墙

一、安全技术和防火墙 1.1 安全技术 入侵检测系统&#xff1a;特点是不阻断网络访问&#xff0c;主要是提供报警和时候报警&#xff0c;不主动介入。 入侵防御系统&#xff1a;透明模式工作&#xff0c;对数据包、网络监控、服务攻击、木马蠕虫、系统漏洞等等进行准确的分析和…

MySql 数据库 (基础) - 下载安装

MySQL数据库 简单介绍 数据库 数据存储的仓库数据库管理系统 操作和管理数据库的大型软件SQL 操作关系型数据库的变成语言&#xff0c;是一套标准 版本 MySQL官方提供了两种不同的版本&#xff1a; 社区版 免费&#xff0c;MySQL不提供任何的技术支持商业版 收费&#xff0c…

【研路导航】重庆大学计算机保研面试真题分享交流

写在前面 在保研的道路上&#xff0c;面试是非常重要的一环。这里是成功保研到重庆大学的学长的计算机保研面试的部分真题及详细解答 ! Q 快速排序和合并排序&#xff1a; 快速排序(quicksort) 和合并排序(merge sort) 两种方法都将输入的待排序序列划分为2个子序列&#xf…

树的概念与二叉树的实现

目录 一. 树的概念 二. 访问树的方法 1. 左孩子右兄弟法 2. 双亲表示法 3. 顺序表存孩子的指针&#xff08;孩子表示法&#xff09; 三. 二叉树 1. 二叉树的定义 2. 特殊二叉树 3. 二叉树的性质 4. 存储方式 四. 二叉树的前中后序遍历 1. 前序遍历 2. 中序遍历 3. …