03-JAVA设计模式-迭代器模式

server/2024/10/21 7:35:08/

迭代器模式

什么是迭代器模式

迭代器模式(demo1.Iterator Pattern)是Java中一种常用的设计模式,它提供了一种顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示的方法。迭代器模式将遍历逻辑从聚合对象中分离出来,使得聚合对象本身更加简洁,同时也使得遍历操作更加灵活和独立。

在Java中,迭代器模式通常通过实现Iterator接口来实现。
Iterator接口定义了访问和遍历元素的方法,如hasNext()用于判断是否还有下一个元素,next()用于获取下一个元素等。

迭代器模式的主要优点包括:

  • 它支持以不同的方式遍历一个聚合对象。
  • 迭代器简化了聚合对象的接口。
  • 在同一个聚合上可以有多个遍历。
  • 在遍历的同时更改聚合对象结构是安全的。

需要注意的是,Java集合框架(Collections Framework)已经内置了迭代器模式,因此在实际开发中,我们通常会直接使用Java集合类提供的迭代器,而不需要手动实现迭代器接口。例如,ArrayList、HashSet等类都实现了Iterable接口,可以通过iterator()方法获取迭代器。

案例

实现逆向迭代

UML

在这里插入图片描述

实现步骤:

  • 定义迭代器接口Iterator类,类中定义判断是否还有下一个及获取下一个数据的接口
  • 定义接口实现类ReverseIterator,类中定义集合List 用于存储数据,定义游标属性用于获取当前集合所在位置, 然后实现Iterator接口

实现代码

Iterator.java

java">// 定义迭代器接口
public interface Iterator {boolean hasNext();Object next();
}

ReverseIterator.java

java">import java.util.List;// 逆向迭代器具体实现方案
public class ReverseIterator implements Iterator{// 定义存储数据private List<Object> items;// 游标由于遍历private int position = 0;public ReverseIterator(List<Object> items) {this.items = items;}@Overridepublic boolean hasNext() {return position < items.size();}@Overridepublic Object next() {position++;return items.get(items.size() - position);}
}

TestClient.java

java">public class TestClient {public static void main(String[] args) {List<Object> list = new ArrayList<Object>();list.add("1");list.add("2");list.add("3");ReverseIterator reverseIterator = new ReverseIterator(list);while(reverseIterator.hasNext()){System.out.println(reverseIterator.next());}}
}

执行结果:
在这里插入图片描述

gitee源码

git clone https://gitee.com/dchh/JavaStudyWorkSpaces.git


http://www.ppmy.cn/server/6147.html

相关文章

[ LeetCode ] 题刷刷(Python)-第58题:最后一个单词的长度

题目描述 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 示例 1&#xff1a; 输入&#xff1a;s "Hello World" 输出&…

开源博客项目Blog .NET Core源码学习(16:App.Hosting项目结构分析-4)

本文学习并分析App.Hosting项目中前台页面的文章专栏页面和文章详情页面。< 文章专栏页面 文章专栏页面总体上为左右布局&#xff0c;左侧显示文章列表&#xff0c;右侧从上向下为关键词搜索、分类导航、热门文章等内容。整个页面使用了layui中的面包屑导航、表单、模版、流…

机器学习和深度学习 -- 李宏毅(笔记与个人理解)Day19

Day 19 Recurrent Neural Network &#xff08;RNN 1&#xff09; md 发现我最近需要恶补一下vue的技术……服了&#xff08;因为有两个项目要交单子了&#xff09; 好吧导致我停更新两天的DL&#xff0c;我去如坐针毡啊&#xff01;今天补上 Slot Filling 将词语用向量的形式来…

Android USB TP方向修改

搜集的一些关于Android USB TP的方向修改的代码&#xff0c;X to Y , X反转 &#xff0c; Y反转&#xff0c;双触屏配置&#xff0c;双屏异触等。 diff --git a/kernel/drivers/hid/hid-multitouch.c b/kernel/drivers/hid/hid-multitouch.c old mode 100644new mode 100755 i…

Linux使用Libevent库实现一个网页服务器---C语言程序

Web服务器 这一个库的实现 其他的知识都是这一个专栏里面的文章 实际使用 编译的时候需要有一个libevent库 gcc httpserv.c -o httpserv -levent实际使用的时候需要指定端口以及共享的目录 ./httpserv 80 .这一个函数会吧这一个文件夹下面的所有文件共享出去 实际的效果, 这…

linux常用命令

查询此字符出现的次数 grep “开始带宽” 2024-04-17.log | wc -l 查询此字符出现的前1000行 grep “开始带宽” -C 1000 2024-04-17.log 查询日志前1000行 head -n 1000 2024-04-17.log 查询日志后1000行 tail -n 1000 2024-04-17.log 查看端口是否通 telnet 127.0.0.1 3306 查…

jmeter分布式压测

前提 调度机和执行机都要安装配置JDK和jmeter的运行环境 调度机和执行机上JDK和Jmeter的版本要保持一致 防火墙要关闭 整体思路 mac电脑当调度机&#xff0c;多个ubuntu虚拟机当执行机 调度机&#xff1a;配置执行机的ip等信息&#xff0c;后面会详细介绍&#xff0c;存放jme…

机器学习常用评价指标的公式和含义

在机器学习中&#xff0c;特别是在分类任务中&#xff0c;评价模型性能常用以下指标。这些指标主要基于混淆矩阵&#xff0c;该矩阵记录了实际类别与模型预测类别的对应情况。下面是这些指标的定义和计算公式&#xff1a; 1. TP&#xff08;True Positives&#xff09;: - …