设计模式(10) 迭代器模式--行为型

从 Mybatis 源码中,学习到的 10 种设计模式 总有不少研发伙伴问小傅哥:“为什么学设计模式、看框架源码、补技术知识,就一个普通的业务项目,会造飞机不也是天天写 CRUD 吗?你说的没错,但你天天写 CRUD,你觉得烦不?慌不?是不是既担心自己没有得到技术成长,也害怕将来没法用这些都是 CRUD 的项目去参加;述职、晋升、答辩,甚至可能要被迫面试时,自己手里一点干货也没有的情况。所以你/我作为一个小镇卷码家,当然要扩充自己的知识储备,否则架构,架构思维不懂设计,设计模式不会源码、源码学习不深,最后就用一堆 CRUD 写简历吗? 阅读详情

定义

迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示。

角色

抽象迭代器(Iterator)

抽象迭代器定义了访问和遍历元素的接口,一般声明如下方法:用于获取第一个元素的first(),用于访问下一个元素的next(),用于判断是否还有下一个元素的hasNext(),用于获取当前元素的currentItem(),在其子类中将实现这些方法。

具体迭代器(ConcreteIterator)

具体迭代器实现了抽象迭代器接口,完成对集合对象的遍历,同时在对聚合进行遍历时跟踪其当前位置。

抽象聚合类(Aggregate )

抽象聚合类用于存储对象,并定义创建相应迭代器对象的接口,声明一个createIterator()方法用于创建一个迭代器对象

具体聚合类(ConcreteAggregate )

具体聚合类实现了创建相应迭代器的接口,实现了在聚合类中声明的createIterator()方法,并返回一个与该具体聚合相对应的具体迭代器ConcreteIterator实例

类图

示例

电视机遥控器就是一个迭代器的实例,通过它可以实现对电视机频道集合的遍历操作

要点

1、它支持以不同的方式遍历一个聚合对象,在同一个聚合对象上可以定义多种遍历方式。在迭代器模式中只需要用一个不同的迭代器来替换原有迭代器即可改变遍历算法,我们也可以自己定义迭代器的子类以支持新的遍历方式。

2、迭代器简化了聚合类。由于引入了迭代器,在原有的聚合对象中不需要再自行提供数据遍历等方法,这样可以简化聚合类的设计。

3、 在迭代器模式中,由于引入了抽象层,增加新的聚合类和迭代器类都很方便,无须修改原有代码,满足“开闭原则”的要求。

4.Java的集合即使用了迭代器模式

迭代器模式,给你更高大上的遍历体验~ 写代码不少使用数组或者类似的集合对象吧?每次要遍历一遍数组怎么办?For 循环!或者while循环,一个一个访问每个位置的元素,直到数组末尾。STL里面甚至有专门的迭代器,针对具体的集合类对象,有对应使用的迭代器。STL的迭代器提供了丰富的遍历方法,如访问集合对象的首位元素、末位元素、指定位置的元素、下一个元素……怎么样,是不是感觉有了迭代器,遍历方法不再是难事了? 1.迭代器模式概述 ... 阅读详情

相关推荐

设计模式--迭代器模式java例子

设计模式--迭代器模式java例子

迭代器模式实例与解析---实例:电视机遥控器

电视机遥控器就是一个迭代器的实例,通过它可以实现对电视机频道集合的遍历操作,本实例我们将模拟电视机遥控器的实现。

bueke的博客 4347

PHP设计模式之迭代器模式Iterator实例分析【对象行为型】

本文实例讲述了PHP设计模式之迭代器模式Iterator。分享给大家供大家参考,具体如下: 1.概述 类中的面向对象编程封装应用逻辑。类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态。单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合。 集合不一定是均一的。图形用户界面框架中的 Window 对象可以收集任意数量的控制对象 - Menu、Slider 和 Button。并且,集合的实现可以有多种方式:PHP 数字是一个集合,但也是一个散列表,一个链接列表,一个堆栈以及队列。 例子1:电视遥控器的频道遍历 2.问题 如何操纵任意的对象集合? 如一个列表(List)

设计模式之迭代器模式实例(c++)

迭代器模式 迭代器提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标。 迭代器模式一般包含Iterator(抽象迭代器)、Conretelterator(具体迭代器)、Aggregate(抽象聚合类)和ConcreteAggregate(具体聚合类)。 迭代器模式实例之电视机遥控器 由类图可以看出,具体Tevelvison类依赖注入具体迭代器,在createiter...

Sincky的博客 956

第八篇 永磁同步电机控制-MTPA、MTPV

MTPA 的全称是 Maximum Torque Per Ampere,即 最大转矩电流比控制。核心思想:在输出特定转矩时,通过控制定子电流的幅值和相位(即d轴和q轴电流的分量),使得所需要的定子电流幅值最小。通俗理解:就是用“最省电”的方式产生所需要的力矩。就像开车时,找到一个最合适的油门和档位配合,使得在输出相同动力时,油耗最低。

深耕汽车电子:AUTOSAR、电机控制,助力数字汽车 1870

数字电路实验避坑指南:如何正确搭建主从JK触发器测试电路(附Proteus仿真)

本文详细解析了主从JK触发器的工作原理及实验搭建指南,重点解决了常见的Catching Problem现象,并提供了Proteus仿真优化方案。通过元器件选型、电路连接步骤和常见错误排查,帮助读者正确搭建测试电路,确保数字电路实验的稳定性和可靠性。

weixin_30790841的博客 469

迭代器模式——电视遥控器的实现

迭代器模式 题目 电视机遥控器就是一个迭代器的实例,通过它可以实现对电视机频道集合的遍历操作,现有TCL和创维两种品牌电视机,模拟电视机遥控器的实现。以下给出了一种实现方式的UML类图。 类图 【分析】 图中Television是抽象聚合类,具体聚合类SkyworthTelevision,其中方法createIterator()创建对应的具体SkyworthIterator对象,具体聚合类TCLTelevision,其中方法createIterator()创建对应的具体TCLIterator对象。TVIt

yifengws的博客 1816

从零搭建VGGNet

在 forward 方法中实现了前向传播过程,包括卷积、激活、池化和平铺操作,最后通过全连接层得到分类结果。使用 torch.onnx.export 将模型导出为 ONNX 格式的文件 vgg.onnx。导出 ONNX:将模型导出为 ONNX 格式,便于在其他平台或框架中使用。定义 VGG 网络:构建了一个包含多个卷积层、池化层和全连接层的网络。使用 torch.save 将整个模型保存为 vgg.pth 文件。前向传播:对输入数据进行前向传播,得到输出结果。保存模型:将模型保存为 .pth 文件。

开源驱动,创造价值;坦诚清晰,快速失败;让复杂可计算。 521

设计模式-迭代器模式

1. 迭代器模式的运用 (1)案例背景: 课堂教学中学习了如何使用迭代器模式来模拟电视遥控器的实现,并使用了内部类的方式来实现迭代 器。在实验中,请将迭代器从具体聚合类(电视机类)中分离出来,重新实现电视遥控器的模拟,请画出 类图并编程实现。 (2)实现步骤: Ø 参照教材中实例,画出电视机遥控器的类图 Ø 根据类图,实现上述类的具体代码以及用户类 Client,请注意将迭代器分离出来,形成单独...

LYly_B的博客 880

告别密码明文传输:手把手带你用Python实现SRP-6协议(附完整代码)

本文详细介绍了如何使用Python实现SRP-6协议,确保密码安全传输和存储。通过零知识证明与密钥交换技术,SRP协议在不传输明文密码的情况下完成认证,适用于金融App等高安全需求场景。文章包含完整代码示例和实战技巧,帮助开发者规避常见安全陷阱。

weixin_30689307的博客 412

概率数据关联(PDA):多目标跟踪的基石算法

1. 为什么需要概率数据关联? 2. 核心思想与假设条件 3. 算法核心:概率分配与状态更新 4. 典型应用场景与优势 5. 挑战与改进方向 6. 下期预告

qq_44965657的博客 1464

C#常见的设计模式-行为型模式

行为型模式是面向对象设计中的一类设计模式,它关注对象之间的通信和相互作用,以实现特定的行为或功能。在C#中,有许多常见的行为型模式,下面将对其中10种行为型模式进行介绍,并给出相应的代码示例。

故事不长丨的博客 1873

《从理念到落地:Claude Code 在真实项目中的深度实践指南》基于 Anthropic 团队内部使用经验的扩展与深度解读,一篇面向工程团队的全面实践手册

Claude Code 支持通过# 创建新的 API 端点根据以下输入创建完整的 API 端点:资源名称:$ARGUMENTS请创建以下文件:1. `src/routes/{resource}.routes.ts` - 路由定义2. `src/controllers/{resource}.controller.ts` - 控制器3. `src/services/{resource}.service.ts` - 服务层。

AI天才研究院 482

设计模式总结(三):行为型模式

行为型模式。

qq_37534947的博客 699

TC3XX - MCAL知识点(十一):WDG EB-tresos配置说明与代码浅析

在AUTOSAR中,看门狗栈实现了三种监控机制:实时监控:用于周期软件的定时监控期限监督:针对非周期软件逻辑监督:用于监督执行顺序的正确性看门狗(WDG)驱动实现AUTOSAR(4.2.2)中规定的看门狗SWS,提供初始化、改变操作模式和设置触发条件(超时)等服务,供看门狗硬件(WDT)用户使用。WDG驱动的用户包括:模式管理模块(用于初始化),WdgM通过Wdglf设置触发条件和驱动运行模式设置。WdgM实施上述监督机制。AUTOSAR扩展触发概念,以支持窗口看门狗模式。

梦想技术家 3601

31、航空软件标准DO - 178C/ED - 12C的实践解读

本文深入解读了航空软件标准DO-178C/ED-12C相较于DO-178B的主要变化,涵盖核心文本更新、各章节关键改进及新技术补充文件的影响。重点分析了目标与活动关系、需求层级定义、验证独立性、MC/DC覆盖、停用代码处理等关键变更,并提供了应对策略,包括流程调整、文档更新、工具选择和与认证机构沟通等建议,旨在帮助航空软件开发者确保合规性,提升软件安全性与可靠性。

tech5的博客 245

设计模式学习笔记 - 设计模式与范式 -行为型:10.迭代器模式(中):遍历集合时,为什么不能增删集合?

在通过迭代器来遍历集合元素的同时增删元素,可能会导致某个元素被重复遍历或遍历不到。不过,并不是所有的情况下都会遍历出错,有时候也能正常遍历,所以,这种行为成为不可预期行为或未决行为。实际上,“不可预期” 比直接出错更加可怕,一些隐藏很深、很难 debug 的 bug 就是这么产生的。有两种解决方案,来避免出现这种不可预期的运行结果。一种是遍历时,不允许增删元素。另一种是增删元素之后,遍历报错。第一种实现方式比较难实现,因为很难确定迭代器使用结束的时间点。第二种解决方案更加合理。

chenjian723122704的专栏 1012

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

前端开发中常用的几种设计模式,零基础入门到精通,收藏这篇就够了

设计模式是对软件设计开发过程中反复出现的某类问题的通用解决方案。设计模式更多的是指导思想和方法论,而不是现成的代码,当然每种设计模式都有每种语言中的具体实现方式。学习设计模式更多的是理解各种模式的内在思想和解决的问题,毕竟这是前人无数经验总结成的最佳实践,而代码实现则是对加深理解的辅助。上述中一共有23种设计模式,但我们作为前端开发人员,需要了解的大概有以下10种。

Python_0011的博客 1139

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

怀旧版电脑GBC模拟器

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

为什么 MyBatis 源码中,没有我那种 if···else

往期热门文章: 1、微软全力拥抱 Java ! 2、巧用 Redis,实现微博 Feed 流功能! 3、知乎高赞:为什么别选计算机专业? 4、Guava骚操作,10分钟搞定日志脱敏需求! 5、公司弃用 Nginx,选择这款工具!在MyBatis的两万多行的框架源码中,使用了大量的设计模式对工程架构中的复杂场景进行解耦,这些设计模式的巧妙使用是整个框架的精华。经过整理,大概有以下设计模式,如图1所...

Java后端技术 148

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

你知道前端开发常用的几种设计模式吗?

设计模式概览 设计模式是对软件设计开发过程中反复出现的某类问题的通用解决方案。设计模式更多的是指导思想和方法论,而不是现成的代码,当然每种设计模式都有每种语言中的具体实现方式。学习设计模式更多的是理解各种模式的内在思想和解决的问题,毕竟这是前人无数经验总结成的最佳实践,而代码实现则是对加深理解的辅助。 设计模式可以分为三大类: 结构型模式(Structural Patterns):通过识别系统中组件间的简单关系来简化系统的设计。 创建型模式(Creational Patterns):处理对象的创..

纸飞机博客 2676

Java设计模式之迭代器模式

迭代器模式

qq_27656927的博客 466

Java二十三种设计模式-迭代子模式(16/23)

迭代器模式是一种行为型设计模式,用于提供一种顺序访问集合元素的方法,而不暴露集合的内部结构。迭代器模式定义了一种迭代访问一个聚合对象中各个元素的接口,允许在不暴露其内部表示的情况下,顺序访问聚合对象中的各个元素。迭代器模式提供了一种强大的方式来顺序访问集合中的元素,同时隐藏了集合的具体实现。通过本文的深入分析,希望读者能够对迭代器模式有更全面的理解,并在实际开发中做出合理的设计选择。Java二十三种设计模式-单例模式(1/23)Java二十三种设计模式-工厂方法模式(2/23)

小相探索IT世界 1322

行为型模式--迭代器模式(Iterator)

迭代器模式(Iterator)

m0_68935893的博客 226

前端框架中的设计模式

Hi,大家好,我是半亩花海。 本文主要介绍前端框架中的设计模式,以部分设计模式的使用案例为背景,从创建型、结构型、行为型模式三大方面简洁地了解前端框架的搭建与应用。

沉思默想,深度学习,半亩星河半亩月,半亩花海半亩云。 422

23个软件设计模式

用一个以及创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。将一个复杂对象的构建与表示分离,使得同样的构建过程(创建步骤)可以创建不同的表示(不同的实例对象)。由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。JAVA中的代理安装代理类生成时机不同又分为静态代理和动态代理。

csdn_pun的博客 6676
上一篇: 设计模式(9)装饰模式--结构型
下一篇: 设计模式(11)组合模式--结构型
gycool21
博客等级 码龄17年 10粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值