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

news2024/10/6 10:36:22

迭代器模式

什么是迭代器模式

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

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

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

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

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

案例

实现逆向迭代

UML

在这里插入图片描述

实现步骤:

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

实现代码

Iterator.java

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

ReverseIterator.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;
    }
    @Override
    public boolean hasNext() {
        return position < items.size();
    }
    @Override
    public Object next() {
        position++;
        return items.get(items.size() - position);
    }
}

TestClient.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.coloradmin.cn/o/1602274.html

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

相关文章

斯坦福大学2024年人工智能发展和前景全面分析报告

2024 年指数是斯坦福大学迄今为止最全面的指数&#xff0c;恰逢人工智能对社会的影响力达到前所未有的重要时刻。今年&#xff0c;斯坦福大学扩大了研究范围&#xff0c;更广泛地涵盖人工智能的技术进步、公众对该技术的看法以及围绕其发展的地缘政治动态等基本趋势。 完整详细…

C++基本输入输出

C 中的输入和输出&#xff08; I/O &#xff09;主要是通过标准库中的输入输出流来实现的。最常用的是 iostream 1. 库&#xff0c;它提供了用于输入和输出的基本流类&#xff0c;包括 cin 、 cout 、 cerr 和 clog 。 1.标准输出流 ( cout ) cout 代表标准输出流&a…

Java 基于微信小程序的医院预约挂号小程序(V3)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

短信防刷之滑动验证码

前言&#xff1a;最近想写一个滑动验证码&#xff0c;前台的样式虽然很好看&#xff0c;但是并不安全&#xff0c;网上也都是一些demo&#xff0c;不是前后台分离的&#xff0c;然后就自己查资料&#xff0c;自己来完成了 滑动验证码 一、为什么要使用滑动验证码 首先&#x…

C++ 秋招必知必会(数据结构与算法:下)

20. 二叉树的定义与操作 二叉树&#xff08;binary tree&#xff09;是一种非线性数据结构&#xff0c;代表着祖先与后代之间的派生关系&#xff0c;体现着“一分为二”的分治逻辑 与链表类似&#xff0c;二叉树的基本单元是节点&#xff0c;每个节点包含&#xff1a;值、左子…

吐血整理102个Python项目,从基础到高级,练完你就牛了!

前言 Python 初学者在迈过安装编程环境和基本语法的门槛&#xff0c;准备大展身手的时候&#xff0c;可能突然就会进入迷茫期&#xff1a; 不知道做些什么、再学些什么。。。 然后对编程的兴趣就会慢慢消退&#xff0c;找不到坚持下去的理由&#xff0c;从而慢慢淡忘之前学会…

JookDB下载安装使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【Arduino IDE 环境配置】

目录 Arduino IDE 环境配置 1. 安装方式2. 操作方法&#xff08;Arduino中文社区&#xff09; 2.1. 安装Arduino IDE2.2. 下载固件2.3. 修改Arduino IDE语言2.4. 添加开发板管理网址2.5. 运行离线包2.6. 检查安装是否成功 下载Arduino IDE&#xff1a; 如果你还没有安装Arduin…

文件包含漏洞利用技术总结

开发人员一般会把重复使用的函数写到单个文件中&#xff0c;需要使用某个函数时直接调用此文件&#xff0c;而无需再次编写&#xff0c;这中文件调用的过程一般被称为文件包含。 allow_url_fopen On&#xff08;是否允许打开远程文件&#xff09; allow_url_include On&…

claude3国内能用吗

claude3国内能用吗 如果您在国内无法直接使用Claude模型&#xff0c;可以考虑以下几种解决办法&#xff1a; 镜像站点&#xff1a;和GPT模型相似&#xff0c;使用为国内用户设置的镜像网站可以是一个解决方案。这些镜像站点可能会提供Claude模型的本地化服务&#xff0c;确保…

CAPL 定时器数组 实现同时注入多条CAN报文

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

HTTP1.0、HTTP1.1、HTTP2.0、HTTP3.0傻傻分不清楚

一、HTTP1.0 默认使用短连接。无状态&#xff0c;无连接。 每个请求都需要新建TCP连接&#xff0c;性能较低。 不支持多路复用。 基于文本的协议。 不支持头部压缩。 请求头不支持Host头域。 不支持服务端推送。 不支持请求优先级。 不允许断点续传。 默认不加密&#xff0c;可…

【一刷《剑指Offer》】面试题 4:替换空格

力扣对应链接&#xff1a;LCR 122. 路径加密 - 力扣&#xff08;LeetCode&#xff09; 牛客对应链接&#xff1a;替换空格_牛客题霸_牛客网 (nowcoder.com) 核心考点 &#xff1a;字符串相关&#xff0c;特性观察&#xff0c;临界条件处理。 一、《剑指Offer》内容 二、分析问…

AlgorithmDay14

day14 二叉树基础 二叉树的种类 满二叉树 只有度为0和2的结点&#xff0c;并且度为0的结点在同一层 &#xff08;深度为k 有2^k-1个结点&#xff09; 完全二叉树 除了最底层可能每天&#xff0c;其余都填满了&#xff0c; 并且最底层的结点集中在该层的左边位置。 二叉…

机器学习引领金融革命:重塑金融服务领域新格局,开启智能化新篇章

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

C:Jump and Treasure(单调队列优化DP+调和级数)

题意&#xff1a;给你一个0到n的柱子&#xff0c;一开始在0&#xff0c;需要跳到大于n的地方&#xff0c;每个柱子上有个得分&#xff0c; 且限制了最大跳跃步数&#xff1b; 思路&#xff1a;一般很容易想到一个 n*p 时间复杂度的DP , 表示以 i 为结尾的最大得分然后枚举前p…

【4月17日】阿里云 腾讯云 京东云 2-64G服务器选择对比 配置、价格全盘点 搭建博客、网站、个人开发建议收藏

更新日期&#xff1a;4月17日&#xff08;阿里云继续保持1.5折&#xff0c;京东云采购季持续进行&#xff09; 本文纯原创&#xff0c;侵权必究 《最新对比表》已更新在文章头部—腾讯云文档&#xff0c;文章具有时效性&#xff0c;请以腾讯文档为准&#xff01; 【腾讯文档实…

socket编程——tcp

在我这篇博客&#xff1a;网络——socket编程中介绍了关于socket编程的一些必要的知识&#xff0c;以及介绍了使用套接字在udp协议下如何通信&#xff0c;这篇博客中&#xff0c;我将会介绍如何使用套接字以及tcp协议进行网络通信。 1. 前置准备 在进行编写代码之前&#xff…

最新版idea 合并分支方法

前言 以下是最新版的idea2024&#xff0c;如果有人找不到按键可能是因为版本不同。 操作步骤 看右小角我的分支是submit&#xff0c;现在我要将test合并到我的submit分支上 找到test分支&#xff0c;选择update&#xff0c;这一步会拉取相应分支内容等同于pull 选择merge 选…

能源成果3D网络三维展厅越发主流化

在这个数字化飞速发展的时代&#xff0c;我们为您带来了全新的展览形式——线上3D虚拟展厅。借助VR虚拟现实制作和web3d开发技术&#xff0c;我们能够将物品、图片、视频和图文信息等完美融合&#xff0c;通过计算机技术和3D建模&#xff0c;为您呈现一个逼真、生动的数字化展览…