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

ops/2024/10/18 10:15:01/

迭代器模式

什么是迭代器模式

迭代器模式(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/ops/6451.html

相关文章

OpenCV基本图像处理操作(十一)——图像特征Sift算法

图像尺度空间 在一定的范围内&#xff0c;无论物体是大还是小&#xff0c;人眼都可以分辨出来&#xff0c;然而计算机要有相同的能力却很难&#xff0c;所以要让机器能够对物体在不同尺度下有一个统一的认知&#xff0c;就需要考虑图像在不同的尺度下都存在的特点。 尺度空间的…

gpt能生成ppt吗

gpt能生成ppt吗 GPT是一个高度通用的工具&#xff0c;适用于多种场景和领域&#xff0c;制作ppt只是它强大功能的冰山一角&#xff0c;具体包括&#xff1a; 信息查询与解释&#xff1a; 提供科学、技术、历史、文化等领域的详细解释和背景信息。 解答疑问&#xff0c;帮助…

HarmonyOS开发实例:【分布式手写板】

介绍 本篇Codelab使用设备管理及分布式键值数据库能力&#xff0c;实现多设备之间手写板应用拉起及同步书写内容的功能。操作流程&#xff1a; 设备连接同一无线网络&#xff0c;安装分布式手写板应用。进入应用&#xff0c;点击允许使用多设备协同&#xff0c;点击主页上查询…

一次Redis访问超时的“捉虫”之旅

01 引言 作为后端开发人员&#xff0c;对Redis肯定不陌生&#xff0c;它是一款基于内存的数据库&#xff0c;读写速度非常快。在爱奇艺海外后端的项目中&#xff0c;我们也广泛使用Redis&#xff0c;主要用于缓存、消息队列和分布式锁等场景。最近在对一个老项目使用的docker镜…

双向链表也叫双链表

双向链表也叫双链表 双向链表也叫双链表 每个节点都有两个指针&#xff0c;分别指向 直接前驱节点、直接后继节点 双向链表中任意一个节点&#xff0c;都可以通过通过它的前驱节点和后继节点&#xff0c;访问其他节点 节点如下 节点定义 ListNode // 节点的值 T element; /…

华为校招机试 - 健康餐(20240410)

题目描述 某减肥食堂,每一份菜都标记了卡路里。 一位顾客,根据营养师的建议,每次饮食都要将卡路里控制在一定区间内(含上下限的值),请问 他有多少种选择? 为了简单起见,每份菜的卡路里用整数表示,且每份菜的卡路里数各不相同; 同一个菜品可以打任意多份。 输入描…

YOLTV8 — 大尺度图像目标检测框架(欢迎star)

YOLTV8 — 大尺度图像目标检测框架【ABCnutter/YOLTV8: &#x1f680;】 针对大尺度图像&#xff08;如遥感影像、大尺度工业检测图像等&#xff09;&#xff0c;由于设备的限制&#xff0c;无法利用图像直接进行模型训练。将图像裁剪至小尺度进行训练&#xff0c;再将训练结果…

2024年五一杯数学建模A题B题C题思路汇总

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…