设计模式(8)-迭代器模式

【信息安全】seed-labs实验-Firewall Exploration Lab 本实验主要就是基于LKM和Netfilter实现简单的防火墙,重点是后者。路由器是有两个ip的,一个是外网ip,一个是内网ip每一次做完实验,都要做好收尾工作(比如:模块装入之后,要记得移除;iptables命令设置完规则之后,要把对应规则删掉) 阅读详情


更多关于设计模式的文章请点击:设计模式之禅(0)-目录页


迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

一、迭代器模式的相关表示

1.1、迭代器角色(Iterator)

定义遍历元素所需要的方法,一般来说会有这么三个方法:取得下一个元素的方法next(),判断是否遍历结束的方法hasNext() ,移出当前对象的方法remove()

1.2、具体迭代器角色(Concrete Iterator)

实现迭代器接口中定义的方法,完成集合的迭代,是具体容器角色需要为客户端提供的迭代器。

1.3、容器角色(Aggregate)

一般是一个接口,提供一个createIterator()方法,例如java中的Collection接口,List接口,Set接口等,这个角色一般有JDK标准库提供(iterator()方法)。

1.4、具体容器角色(ConcreteAggregate)

就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等,这个角色一般有JDK标准库提供。

在这里插入图片描述

二、List中关于迭代器的实现

本次的迭代器模式不再自己写代码,而是用List接口和ArrayList实现类作为容器角色和具体容器角色进行分析,我们这次以一个用户的角度去看迭代器模式:

  • Client
/**
 * @Auther: ARong
 * @Date: 2018/12/3 16:20
 * @Description: 测试迭代器模式客户端
 */
public class Client {

    @Test
    public void fun1(){
        //创建一个ArrayList存10个数字
        List list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }

        //使用迭代器去遍历元素
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next()+"\t");
        }
    }
}

我们查看ArrayList的源代码关于iterator()方法的部分:

public Iterator<E> iterator() {
        return new Itr();
    }
	
private class Itr implements Iterator<E> {
        int cursor;       // index of next element to return
        int lastRet = -1; // index of last element returned; -1 if no such
        int expectedModCount = modCount;

        Itr() {}

        public boolean hasNext() {
            return cursor != size;
        }

        @SuppressWarnings("unchecked")
        public E next() {
            checkForComodification();
            int i = cursor;
            if (i >= size)
                throw new NoSuchElementException();
            Object[] elementData = ArrayList.this.elementData;
            if (i >= elementData.length)
                throw new ConcurrentModificationException();
            cursor = i + 1;
            return (E) elementData[lastRet = i];
        }

我们可以看出Itr类就是Iterator接口的实现类,对Iterator的hasNext()和next()方法进行了相应的重写。

在这里插入图片描述

大模型微调部署实战及类GPT工具的高效使用 本文主要介绍了专栏《大模型微调部署实战及类GPT工具的高效使用》的核心内容,希望对使用大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 专栏亮点 3. 你的收获 4. 详细目录 阅读详情

相关推荐

昆仑通态屏幕制作(连载1)---接触篇

写在开始 背景:最近出了做QT、LORA和4G,还做了一个屏幕。以前做了一个迪文的串口屏幕,发现网上的教程很多,所以连载就不更新了,并且迪文屏幕的设置什么的比较简单,应该从网上都能找到对应的教程。而现在用的昆仑通态的屏幕属于嵌入式屏幕,至于为啥叫嵌入式,也不是很明白,反正就是需要用这个屏幕,嵌入式不嵌入式不重要了。重要的是能用,并且能实现串口屏幕不能实现的功能。所以选定昆仑通态的一款屏幕。 文章语言:我比较习惯用比较糙的语言介绍做的东西,有时候不太准备,但是为了方便理解,还请大家谅解。用...

weixin_45426095的博客 6737

Java设计模式8:迭代器模式

迭代器模式 迭代器模式又叫做游标(Cursor)模式,其作用是提供一种方法访问一个容器元素中的各个对象,而又不暴露该对象的内部细节。   迭代器模式结构 迭代器模式由以下角色组成: 1、迭代器角色 负责定义访问和遍历元素的接口 2、具体迭代器角色 实现迭代器接口,并要记录遍历中的当前位置 3、容器角色 负责提供创建具体迭代器角色的接口

TinnnnnnY 351

Qt C++实现HTTP/HTTPS服务器与客户端:从Socket到协议解析全流程

HTTP协议作为Web通信的基础,定义了客户端与服务器之间基于文本的请求-响应模型。其工作原理是通过TCP连接传输结构化的报文,实现资源获取与数据交换。在C++开发中,掌握HTTP协议底层实现具有重要技术价值,能够帮助开发者构建高性能、可深度定制的网络应用,尤其适用于嵌入式设备管理、桌面应用后端等场景。本文聚焦于使用Qt框架的QTcpSocket和QSslSocket组件,从Socket层面手动实现完整的HTTP/HTTPS通信栈,涵盖协议解析、流式处理、路由分发等核心环节,并深入探讨了HTTPS证书验证、

weixin_31292729的博客 333

迭代器 java_Java设计模式8:迭代器模式

迭代器模式迭代器模式又叫做游标(Cursor)模式,其作用是提供一种方法访问一个容器元素中的各个对象,而又不暴露该对象的内部细节。迭代器模式结构迭代器模式由以下角色组成:1、迭代器角色负责定义访问和遍历元素的接口2、具体迭代器角色实现迭代器接口,并要记录遍历中的当前位置3、容器角色负责提供创建具体迭代器角色的接口4、具体容器角色实现创建具体迭代器角色的接口,这个具体迭代器角色与该容器的结构相关迭代...

weixin_39674414的博客 84

LLC混合滞回控制 vs 电压模/电流模:UCC25640x仿真对比与选型指南

在开关电源设计中,LLC谐振变换器的环路补偿是核心难点。传统电压模控制(VMC)和电流模控制(CMC)在LLC拓扑上存在环路增益漂移、动态响应慢等局限。混合滞回控制通过滞回比较器直接调制开关频率,并融合输出电压与谐振腔电流信息,实现了自适应环路增益和快速瞬态响应。该技术显著提升轻载效率与动态性能,适用于高密度适配器、快充及车载充电机等场景。本文基于UCC25640x系列,通过仿真对比三种控制策略,为工程选型与调试提供实践参考。

weixin_33925615的博客 336

Windows下Delft3D安装全攻略:从申请许可到编译运行(避坑指南)

本文详细解析了Windows系统下Delft3D的完整安装流程,涵盖环境准备、许可获取、源码编译到性能调优的全过程。针对中国用户常见的网络问题和系统兼容性痛点,提供了经过验证的解决方案,特别强调Intel Fortran编译器匹配、环境变量配置等关键步骤,帮助水利工程师高效完成这一水动力学模拟工具的部署。

weixin_28736355的博客 550

[学习笔记]设计模式[8]-{迭代器模式}

设计原则一个类应该只有一个引起变化的原因根据前面的设计原则我们知道,要避免类内的改变,因为修改原有的代码就很容易造成潜在的bug,如果一个类有多个会导致他变化的原因,那这个类以后被修改的可能性就会提高,而且这个类的修改会影响到多个方面。 那么我们的设计就需要只将一个责任指派给一个类。 下面的迭代器模式,将一个类的遍历的责任从这个类中提取出来,从而保证一个类只有管理自己的聚合这一责任。设计模式迭代

Narcssus的专栏 328

36、基于启发式的双向RRT*路径规划算法解析

本文介绍了一种基于启发式的双向RRT*路径规划算法(LGHB-RRT*),通过地图预处理、通道区域提取和通道识别点定义,结合随机树的引导生长与可变密度采样机制,显著提升了在复杂通道环境下的搜索效率与成功率。算法采用双向扩展结构,并引入启发式生长策略引导树向通道关键点发展,同时利用路径优化简化最终路径。仿真结果表明,该算法在多种复杂地图中均能高效找到最优路径,优于传统RRT*和Bi-RRT*算法,具备良好的适应性与应用前景。

rgv234567的博客 121

设计模式-5.8迭代器模式

提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。

yueerba126的博客 122

ROS2 多机器人导航仿真入门教程(一)

RMF 是建立在 ROS 2 基础上的一系列可重复使用、可扩展的库和工具,可实现任何类型机器人系统的异构机群的互操作性。RMF 利用标准化的通信协议与部署机器人的基础设施、环境和自动化系统进行通信,以优化关键资源(如机器人、电梯、门、通道等)的使用。它通过资源分配和通过 RMF 核心(将在本书后面详细介绍)防止共享资源冲突,从而为系统增加智能。RMF 灵活而强大,几乎可以在任何通信层上运行,并与任何数量的物联网设备集成。RMF 的架构设计允许随着环境自动化水平的提高而扩展。

2506_90492529的博客 1660

redhawk:avgTW maxTW minTW minWC的区别

分析dynamic ir drop报告时会遇到这几个值,avgTW maxTW minTW minWC,如下图。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 696

【Java设计模式】六、6.8 行为型模式——迭代器模式

6.8 迭代器模式 6.8.1 概述 定义: 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 6.8.2 结构 迭代器模式主要包含以下角色: 抽象聚合(Aggregate)角色:定义存储、添加、删除聚合元素以及创建迭代器对象的接口。 具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。 抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、next() 等方法。 具体迭代器(Con

Ep流苏的博客 216

基于卷积神经网络CNN实现电力负荷多变量时序预测(PyTorch版)

随着智能电网的发展,精准的电力负荷预测对能源调度和电网稳定具有重要意义。本文基于PyTorch框架,提出一种基于卷积神经网络(CNN)的多变量时间序列预测模型,用于电力负荷的短期预测。

时序笔记 989

大话设计模式8 组合模式 迭代器模式

1.组合模式 将对象组合成树形结构进行表示,使用户对单个对象和组合对象的使用具有一致性。当用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,可以考虑使用组合模式。 import java.util.ArrayList; abstract class Component{ protected String mName; public Component(Strin

Ritter Liu的专栏 2584

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Head First 设计模式笔记 8.迭代器模式和组合模式

迭代器模式 在设计中我们常常会遇到一些对象的集合,假如要让客户了解内部细节去访问这些元素,一来不安全,二来客户任务会很繁琐,这个时候迭代器模式就可以排上用场了。下面我们举个例子来说明迭代器模式的工作方式。 餐厅和煎饼屋 现在餐厅和煎饼屋合并了,早餐在煎饼屋提供,而午餐由餐厅提供,结果双方就菜单的问题吵了起来。原来,煎饼屋的早餐菜单是用ArrayList实现的,而餐厅的午餐菜单是由Array数组实现的。两家互不相让,导致服务员要打印它们的菜单的话,就需要用不同的方法。 打印ArrayList类型的早餐菜单 /

zhazha_hui的博客 295

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

设计模式(C++实现)专题 -- 2.3.8 迭代器模式

迭代器模式

NEWPLAN的专栏 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

迭代器模式和组合模式(head first设计模式——8)

把迭代器模式和组合模式放在同一篇的原因是其联系比较紧密。 一、迭代器模式 1.1迭代器模式定义 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示。 这个模式提供了一种方法,可以顺序访问一个聚合对象中的元素,而不用知道内部怎么表示的。为了更好的理解迭代器模式,我们举个例子。 1.2迭代器例子 下面使用head first设计模式中的例子,使用迭代器模...

weixin_34332905的博客 196

设计模式(8) - 迭代器模式(iterator)- 实现ArrayList和linkedList的迭代器

上周六就开始写这篇博客,之后一直耽误了,到前天才开始写,今天醒的早,就把这部分整理一下。本文内容参考易学设计模式和马士兵的迭代器模式的视频。   了解迭代器模式一个作用就是让你在使用 迭代器遍历集合类的时候 觉得更自然。 一 、迭代器模式简介 【定义】 跌倒器模式提供一种顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示的方法。 【原理】 主要4部分组成:迭代器角色、具体迭代器角

1836

行为型设计模式06-迭代器模式

一天一个设计模式,今天学习迭代器模式:提供了一种方法来访问聚合对象中的各个元素,而不暴露其内部表示。通过使用迭代器,客户端可以遍历一个聚合对象中的元素,而不必了解其内部实现。

十二间记,知不足而奋斗,望远山而前行。千里不辞行路远,时光早晚到天涯。 329

设计模式——迭代器模式

它提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。迭代器是为容器服务的,能容纳元素的对象可以称为容器,例:List、Set、Map迭代器模式(Iterator Pattern)已经是没落的设计模式,常用的容器基本都有成熟稳定的实现,基本不会再去单独写一个迭代器。

qq_43975645的博客 524

设计模式--常用8个设计模式 单例-策略-责任链-装饰者-迭代器模式-观察者模式-常用设计模式

1创建型的设计模式—主要有单例模式和工厂模式 对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题 2结构型的设计模式—主要有代理模式和适配器模式 如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等,因此对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点。 2 3行为型模式

炫的博客 608

Java设计模式精讲—课程笔记8(第18章 迭代器模式 + 第19章 策略模式 + 第20章 解释器模式)

Java设计模式精讲—课程笔记818 迭代器模式讲解+源码解析18.1 迭代器模式讲解18.2 迭代器模式代码解析18.3 迭代器模式源码解析(jdk+mybatis)19 策略模式讲解+Coding+源码解析19.1 策略模式讲解19.2 策略模式coding19.3 策略模式源码解析(jdk+spring)20 解释器模式讲解+源码解析20.1 解释器模式讲解20.2 解释器模式coding2...

江南土豆的博客 328

[导入]C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式.zip(8.04 MB)...

讲座内容: 本培训课程探讨GoF23之 Iterator 迭代器模式的意图、动因、原理、应用场景与C#语言实现,以及该模式在.NET框架程序设计中的具体应用。 课程讲师: 李建忠 上海祝成信息科技有限公司 高级培训讲师 MSDN特邀讲师 .NET技术专家,C++/CLI 专栏作家。南京邮电学院毕业,历任程序员,高级程序员,开发主管。现为上海祝成科技软件架构师,高级培训讲师。译著Micros...

weixin_30432179的博客 70
上一篇: 设计模式(7)-模板方法模式
下一篇: Vue.js脚手架的安装及使用
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值