Java设计模式 _行为型模式_迭代器模式

news/2024/7/14 22:04:04

一、迭代器模式

1、迭代器模式
迭代器模式(Iterator Pattern)是一种行为型设计模式,用于顺序访问集合对象的元素,不需要关心集合对象的底层表示。如:java中的Iterator接口就是这个工作原理。

2、实现思路
(1)、定义表达式的规范(一般就是:hasNext,getNext)
(2)、编写实现类,实现该规范接口。(可以用过index索引来校验)
(3)、编写新的容器类,内置实现类和集合类,通过调用容器内部的实现类来获取容器内部集合属性的元素。

二、代码示例

1、示例场景
编写迭代器,通过迭代器的方法获取和校验下一个元素。
2、代码示例

// 1、编写规范类
public interface Iterator1 {Object getNext();boolean hasNext();
}
// 2、编写实现类迭代器
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;public class ListIterator implements Iterator1 {List<Object> objectList;private int index = 0;public ListIterator(List<Object> objectList) {if (CollectionUtils.isEmpty(objectList)) {this.objectList = new ArrayList<>();} else {this.objectList = objectList;}}@Overridepublic Object getNext() {Object obj = null;if (hasNext()) {obj = objectList.get(index);index++;}return obj;}@Overridepublic boolean hasNext() {if (index < objectList.size()) {return true;}return false;}
}
// 3、自定义容器,内置迭代器,通过迭代器获取集合元素
import lombok.Data;
import java.util.ArrayList;
import java.util.List;@Data
public class MyContainer {private List<String> nameList;private ListIterator listIterator;public MyContainer(List<String> list) {this.nameList = list;listIterator = new ListIterator(new ArrayList<>(list));}
}
// 4、测试
public static void main(String[] args) {List<String> nameList = new ArrayList<>();nameList.add("zhangsan");nameList.add("lisi");nameList.add("wangwu");MyContainer myContainer = new MyContainer(nameList);ListIterator myIterator = myContainer.getListIterator();while (myIterator.hasNext()){System.out.println(myIterator.getNext());}}

运行结果:
在这里插入图片描述
可以看到已经遍历打印了所有的元素。

总结:
迭代器模式主要用来处理数据集合,可以在不关注集合底层类型的情况下获取下一个元素或上一个元素(可以在上面的示例代码中追加规范方法进行扩展)。相对于java本身的Iterator接口来说,非常类似,使用场景目现也比较小,目前大部分的三方工具包都包含对集合的处理方法,可以了解一下。

学海无涯苦作舟!!!


http://www.mrgr.cn/p/56267104

相关文章

基于SSM的大学生兼职管理系统

基于SSM的大学生兼职管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 企业界面 前台学生界面 管理员界面 摘要 随着大学生兼职市场的日益繁…

AI大模型如何赋能智能座舱

AI 大模型如何赋能智能座舱 从上海车展上&#xff0c;我们看到由于智能座舱配置性价比较高&#xff0c;已经成为车企的核心竞争点之一&#xff0c;随着座舱硬件规模化装车&#xff0c;蔚小理、岚图、极狐等新势力开始注重座舱多模态交互&#xff0c;通过集成语音/手势/触控打造…

初识C语言——第二十八天

代码练习1&#xff1a; 用函数的方式实现9*9乘法表 void print_table(int n) {int i 0;int j 0;for (i 1; i< n; i){for (j 1; j< i; j){printf("%d*%d%-3d ", i, j, i * j);}printf("\n");}}int main() {int n 0;scanf("%d", &a…

弱监督语义分割-对CAM的生成过程进行改进3

三、擦除图像高响应部分以获取更多的分割领域 ECS-Net: Improving Weakly Supervised Semantic Segmentation by Using Connections Between Class Activation Maps&#xff08;ICCV,2021&#xff09; 1.引言 我们首先从图像中擦除高响应区域&#xff0c;并生成这些擦除图像…

Java类和对象(五)—— 抽象类、接口、Object类和内部类

抽象类 在继承体系下&#xff0c;父类有些方法可能是要被重写的&#xff0c;如果我们事先就知道某些方法需要重写的话&#xff0c;我们可以不用在父类里面具体实现这个方法&#xff0c;这时候我们会用到抽象方法&#xff0c;这时候我们会用到关键字abstract关键字来修饰 publ…

求第 N 个泰波那契数 | 动态规划

1.第 N 个泰波那契数 题目连接&#xff1a;1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 2.什么是动态规划 在解决这道问题之前…

常见的几种数据库通过SQL对表信息进行查询

一、前言 我们查询数据库表的信息&#xff0c;一般都使用界面化的连接工具查看&#xff0c;很少使用SQL语句去查&#xff0c;而且不同的数据库SQL语句又各自有差异。但如果通过代码去获取数据库表的信息&#xff0c;这时就需要通过SQL语句去查了&#xff0c;这个在逆向代码生成…

Delta Magisk root后解决adb的报错问题

adb root报错“adbd cannot run as root in production builds” su报错“Permission denied”之后再运行adb root或者su,不仅会报错,而且无论自动响应开的是 提示/运行/拒绝 都会有弹窗“shell已被拒绝超级用户权限”,只需最后一步

Vue从入门到实战Day12

一、Pinia快速入门 1. 什么是Pinia Pinia是Vue的最新状态管理工具&#xff0c;是Vuex的替代品 1. 提供更加简单的API&#xff08;去掉了mutation&#xff09; 2. 提供符合组合式风格的API&#xff08;和Vue3新语法统一&#xff09; 3. 去掉了modules的概念&#xff0c;每一…

gitlab-runner

gitlab账号密码 第一次登录 部署gitlab,第一登录,要注册,遇到问题 Your account is pending approval from your GitLab administrator and hence blocked. Please contact your GitLab administrator if you think this is an error.如果是第一次,不知道密码:如下查看,24…

机器学习云环境测试

等待创建完成后&#xff0c;点击 PyTorch 打开&#xff0c;创建一个全新的 notebook 在 Cell 中输入如下代码&#xff0c;并点击 Run 完成后点击 New Cell &#xff0c;在 New Cell 中输入如下代码 输入完成后点击 Run &#xff0c;运行 New Cell 。&#xff08;每个 Cell 代…

「杂文」应用基础实践一(网络+Java)实验报告

基于基于基于学长的学长的学长的代码的学长的学长的代码的学长的代码目录写在前面实验目的与要求实验(一)用JavaSocket编程开发聊天室实验(二)用JavaURL编程爬取并分析网页敏感词实验环境实验原理实验(一)Socket编程接口Java 中的 Socket 类Java SwingSQLite实验(二)网…

ssti(2)

WAF绕过&#xff1a; 1、{%%}绕过过滤{{}} 尝试{%%}&#xff0c;想回显内容在外面加个print就行&#xff0c; {%print("".__class__)%} 思路&#xff1a; 1、判断{{}}被过滤尝试{%%} 2、判断语句能否正常执行 {% if2>1%}Benben1{%endif%} {% if ”:class%}Benbe…

基于深度学习的表情识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着人工智能技术的快速发展&#xff0c;表情识别成为了人机交互领域的一个研究热点。表情识别技术旨…

golang通过go-aci适配神通数据库

1. go-aci简介 go-aci是神通数据库基于ACI(兼容Oracle的OCI)开发的go语言开发接口&#xff0c;因此运行时需要依赖ACI驱动和ACI库的头文件。支持各种数据类型的读写、支持参数绑定、支持游标范围等操作。 2. Linux部署步骤 2.1. Go安装&#xff1a; 版本&#xff1a;1.9以上…

【Centos7+JDK1.8】Jenkins安装手册

一、安装环境 Centos7 JDK1.8 Jenkins-2.346.3 JDK1.8安装以及网络配置等 自行搜索资料解决。 二、卸载历史安装的Jenkins&#xff0c;直接全部复制粘贴下面的命令 service jenkins stop yum -y remove jenkins rpm -e jenkins rpm -ql jenkins rm -rf /etc/sysconfig/je…

Undet for SketchUp 2023.3 点云建模软件 支持支持草图大师sketchup2021-2022-2023

1.Undet for sketchup 2023.3支持草图大师sketchup2021-2022-2023。支持机载雷达扫描、车载扫描还是地面扫描&#xff0c;对AEC行业用户来说&#xff0c;真正需要的是如何将这些数据快速处理为三维模型&#xff0c;这样才能将这些信息延展到BIM领域发挥效用。因此面对这些海量的…

Cesium与Three相机同步(2)

之前实现了将Three相机同步到Cesium相机Cesium与Three相机同步(1)-CSDN博客 现在是将Cesium相机同步到Three相机,从而实现了相机双向同步。 <!DOCTYPE html> <html lang="en"><head><title>three.js webgl - orbit controls</title&g…

AI视频教程下载:全面掌握ChatGPT和LangChain开发AI应用(附源代码)

这是一门深入的课程&#xff0c;涉及ChatGPT、LangChain和Python。打造专注于现实世界AI集成的AI应用&#xff0c;课件附有每一节涉及到的源代码。 **你将学到什么&#xff1a;** - 将ChatGPT集成到LangChain的生产风格应用中 - 使用LangChain组件构建复杂的文本生成管道 - …

学习笔记481—Word中Ctrl+V快捷键无法实现粘贴的解决方法

Word中Ctrl+V快捷键无法实现粘贴的解决方法 在使用Word时,有时可能会遇到Ctrl+V快捷键无法使用的情况。这可能是由于word中安装了Mathtype导致的。本篇文章就该问题谈一谈相应的解决方法。问题描述:Word中Ctrl+V快捷键无法实现粘贴解决方法:在Word中禁用或移除MathtypeWord版…