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

C++设计模式 - 迭代器模式 知识的学习在于点滴记录,坚持不懈;知识的学习要有深度和广度,不能只流于表面,坐井观天;知识要善于总结,不仅能够理解,更知道如何表达! 目录设计模式概念迭代器模式简介迭代器模式代码示例 设计模式概念 设计模式简单来说就是在解决某一类问题场景时,有既定的,优秀的代码框架可以直接使用,与我们自己摸索出来的问题解决之道相比较,有以下优点可取: 代码更易于维护,代码的可读性,复用性,可移植性,健壮性会... 阅读详情

1前言

在面向对象中,针对抽象集合迭代行为的设计模式称为迭代器。

2 详述

2.1 简述

迭代器提供了一种顺序访问聚合对象(集合)中元素的方法,而无需暴露结构的底层表示和细节。便利集合中元素的只能从集合本身转移到迭代器对象。迭代器定义了一个用于访问集合元素并记录当前元素的接口。不同的迭代器可以执行不同的遍历策略。

提供一种方法顺序访问一个聚合对象中得各个元素,而又不需暴露该对象的内部表示。

2.2 分类

外部迭代器:让客户端直接操作迭代过程,所以客户端需要知道外部迭代器才能使用。

内部迭代器:集合对象(被迭代的目标对象)在其内部维护并操作一个外部迭代器。提供内部迭代器的典型的集合对象为客户端定义一个接口,或者从底层的集合一次访问一个元素,或者向每个元素发送消息。

2.3 何时使用

(1)需要访问组合对象的内容,而又不暴露其内部表示;

(2)需要通过多种方式遍历组合对象;

(3)需要提供一个统一的接口,用来遍历各种类型的组合对象。

3 快速枚举

Objective-C2.0提供了一种枚举,称为快速枚举。它是苹果公司推荐的枚举方法。它允许把对集合对象的枚举直接用作for循环的一部分,无需使用其他枚举器对象,而且比传统的基于索引的for循环效率更高。快速枚举的语法如下:

NSArray * anArray = ... ;
for (NSString * item in anArray)
{
  // 对item作些处理
}

现在枚举循环使用指针运算(pointer arithmetic),让它比使用NSEnumerator的标准方法效率更高。

要利用快速枚举,集合类需要实现NSFastEnumeration协议,以向运行库提供关于集合的必要信息。基础框架中的所有集合类与NSEnumerator类都支持快速枚举。因此不必使用while循环从NSEnumerator枚举每个元素,直到nextObject返回nil,我们可以使用其快速枚举的版本,如下面的代码段所示:

NSArray * anArray = ... ;
NSEnumerator * itemEnumerator = [anArray objectEnumerator];
for (NSString * item in itemEnumerator)
{
  // 对item作些处理 
}

虽然既可以使用集合对象的快速枚举,也可以使用枚举器的快速枚举,但如果只需要默认遍历(通常只按升序),直接对集合对象进行快速枚举更为合理。NSEnumerator使用其nextObject方法实现NSFastEnumeration协议。从性能上说,它比直接在while循环中手动调用这个方法好不了多少。尽管跟传统的使用nextObject的while循环相比,快速枚举中的for循环显得更为整洁。

4内部枚举

NSArray有个实例方法叫(void)makeObjectsPerformSelector:(SEL)aSelector,它允许客户端向数组中每个元素发送一个消息,让每个元素执行指定的aSelector(假定元素支持它)。可以用前面提到的任何一种枚举方法让每个元素执行相同的选择器,达到相同的目的。这个方法在内部枚举集合并向每个元素发送performSelector:消息。这种方式的缺点是如果集合中任何元素不响应选择器,就会抛出异常。因此它主要适用于不需太多运行时检查的简单操作。

23中设计模式-迭代器(Iterator)设计模式 软考中级-软件设计师 迭代器模式 阅读详情

相关推荐

嵌入式通讯协议全解析:UART、I2C、SPI、CAN与Modbus实战指南

通讯协议是嵌入式系统设计的核心基础,也是面试与工程实践中避不开的关键环节。从串口UART的异步收发,到I2C总线寻址与SPI高速全双工传输,再到RS485差分长距离通信、CAN总线多主仲裁机制,以及工业领域事实标准的Modbus RTU协议,每一种技术都对应着特定的应用场景与设计权衡。理解协议背后的物理层原理、时序特征和工程坑点,才能真正解决设备间通信的选型、调试与健壮性问题。本文从基础概念出发,系统梳理各类嵌入式通讯协议的工作机制,并结合实际代码示例与对比表格,帮助开发者在面对面试问题或项目设计时,构建从

weixin_42520573的博客 276

重学设计模式(三、设计模式-迭代器模式)

迭代器模式是一种行为设计模式,提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示(列表、堆栈、树...)的情况下遍历集合的元素

小仙儿 1291

EFR32无线SoC开发指南:从环境搭建到性能优化

物联网边缘设备开发中,无线SoC芯片的选择与开发环境配置是关键第一步。EFR32作为Silicon Labs推出的多协议无线SoC系列,配合Simplicity Studio IDE,为开发者提供了完整的解决方案。本文以EFR32xG22开发套件为例,详细介绍开发环境搭建、工程创建、硬件配置等核心环节,特别针对RAILtest示例工程进行深入解析。通过实际案例演示如何配置无线参数、优化低功耗模式,并分享串口终端交互、吞吐量测试等实战技巧。对于开发者常见的问题如设备识别失败、无线通信异常等,提供了系统化的排查

weixin_30342363的博客 352

迭代器模式

迭代器模式几乎在所有面向对象语言中都大量存在,且被很多语言支持,如java,c#等已经内部支持(也就是foreach)。迭代器模式可以为不同的集合对象提供统一的遍历接口,而不用关心集合的内部结构。遍历集合对象时,优先使用迭代器模式,能让代码更具可移植性和重用性。下面时具体代码(代码只是粗糙实现): //声明一个集合接口 public interface Collection { publi

SummerMangoZz的博客 487

京东技术产品经理面试全记录:从简历投递到一面45分钟实战复盘

本文深度复盘京东技术产品经理面试全流程,从策略准备、思维题拆解、项目阐述到反问谈判,提供了一套可演练的求职策略体系。文章强调该岗位需具备横跨技术与商业的枢纽能力,并通过“QQ分组vs微信标签”等案例,剖析了产品思维与结构化表达在面试中的关键作用,助力候选人将紧张转化为掌控感。

weixin_29275257的博客 630

Rockchip平台Android相机HAL3开发实战:从配置到调试全流程解析

本文深入解析了Rockchip平台Android相机HAL3的开发全流程。从理解AAL与PSL核心架构、解析关键配置文件(如camera3_profiles.xml和Tuning文件),到搭建编译环境、进行增量部署,并提供了系统日志分析、V4L2调试等高级问题排查技巧,为开发者提供了一套从配置到调试的实战指南。

docker7nomad的博客 844

迭代器(Iterator)

为了方便的处理集合中的元素,Java中出现了一个对象,该对象提供了一些方法专门处理集合中的元素.例如删除和获取集合中的元素.该对象就叫做迭代器(Iterator). iterator() 返回该集合的迭代器对象 该类主要用于遍历集合对象,该类描述了遍历集合的常见方法 java.lang. Itreable   ---| Itreable      接口 实现该接

weixin_38173324的博客 357

FTP新手必看:vsftpd 530登录错误的8种实战解决方案(附详细配置步骤)

本文针对FTP服务配置中常见的vsftpd 530登录错误,提供了8种实战解决方案。从理解错误本质入手,系统性地排查用户列表策略、PAM认证、系统黑名单、Shell限制、目录权限及DNS解析等问题,并附有详细的配置步骤与命令,帮助新手快速定位并解决登录失败难题。

ik678901的博客 696

设计模式之迭代器

(Iterator) 是一种行为设计模式, 让你能在不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素。如果对C++中STL比较了解的话,学习此设计模式很容易。适用场景代码如下:问题:两个餐厅要合并,虽然两家菜单系统类似,但底层使用的数据结构不同,如何实现一个通用的菜单遍历器?解决方案:提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。

qq_74811378的博客 1358

37、半导体硅材料中的缺陷与吸杂技术解析

本文系统解析了半导体硅材料中的缺陷形成机制及其对电子器件性能的影响,重点探讨了生长和工艺诱导缺陷、表面与内部微缺陷的起源与特征。文章详细阐述了吸杂技术的原理、过程及在集成电路和太阳能电池制造中的应用,强调通过氧行为调控和热处理优化实现缺陷控制。同时介绍了吸杂效果的评估方法,并展望了未来新型吸杂技术的发展趋势,为提升半导体器件性能和制造良率提供理论支持和技术路径。

mongodb5scout的博客 163

【RBF预测】基于粒子群算法优化RBF神经网络实现数据回归预测含Matlab源码

1 简介 原油含水率预测对于确定油井水,油层位以及估计原油产量有着非常重要意义.BP神经网络是最近常用的原油含水率预测方法,然而,由于BP神经网络存在容易陷入局部极小值,收敛速度慢等问题,影响了其预测的实用性和准确性,对此,提出基于粒子群优化RBF神经网络(PSO-RBFNN)的原油含水率预测方法,粒子群优化算法用于RBF神经网络参数优化.在分析原油含水率预测的影响因素基础上,建立粒子群优化RBF神经网络的原油含水率预测模型.实验结果表明,在原油含水率预测中,基于粒子群优化RBF神经网络比BP神经网络有着

qq_59747472的博客 1233

行为设计模式:迭代器设计模式

假设我们想要开发一个新的数据结构,它是一个集合,然后我们可以使用迭代器模式。如果有人想要使用数据结构,他们可以简单地使用您描述的迭代器,而不必在他们的代码中创建唯一的迭代器。即使你从未遇到过这些问题,识别模式也很有价值,因为它教会了你如何使用面向对象的设计概念来解决大量的问题。它是最后一个必需的参与者,负责 Aggregate 接口的实现。众所周知,迭代器是一种行为设计模式,它允许您遍历集合的组件,而无需显示下面的表示。当你的集合有一个复杂的数据结构,你希望对客户端隐藏,那么我们使用迭代器模式的概念。

新华编程特战队 2052

【华为OD机试真题】6、数组去重和排序 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

题目描述 >给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序

KJ.JK 3888

Design Pattern Iterator 迭代器设计模式

这个设计模式感觉非常简单,我们平时写程序的时候也是经常需要调用iterator的,C++和Java都是。 所以感觉没什么特别的,就是需要模仿C++或者Java的iterator类的功能吧。 这里简单写个,使用C++模仿Java的iterator一些功能,呵呵。 首先我们有一个集合类,而这个集合类包含了其他类,当我们需要遍历这个集合类包含的类的时候,就好使用iterator功能了。 比如有一

靖空间 1307

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

迭代器设计模式(Iterator Design Pattern)[论点:概念、组成角色、相关图示、示例代码、框架中的运用、适用场景]

迭代器设计模式(Iterator Design Pattern)是一种行为型设计模式,它提供了一种方法来顺序访问一个聚合对象(如集合)的元素,而不需要暴露该对象的底层表示。迭代器模式可以帮助我们在不关心底层数据结构的情况下,遍历一个集合。

龙飞的博客 844

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

设计模式之迭代器设计模式

抽象迭代器角色(Iterator):负责定义访问和遍历元素的接口,包括几个核心方法,取得下一个元素的方法next(),判断是否遍历结束的方法isDone()(或者叫hasNext()),移除当前对象的方法remove()具体容器角色(ConcreteAggregate):实现抽象容器的具体实现类,例如List接口的有序列表实现ArrayList,List接口的链表实现LinkedList,Set接口的哈希列表的实现HashSet等。代码示例,自定义集合容器简化版。

2302_76363587的博客 868

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

设计模式之迭代器模式

迭代器模式为遍历集合中的元素提供了一种通用接口。其核心思想是,将集合的遍历逻辑与集合对象的实现分离。通过迭代器,客户端代码无需关心集合的底层实现方式(如数组、链表等),就能顺序地访问集合的每一个元素。迭代器设计模式提供了在不暴露对象内部结构的情况下,顺序访问对象集合的有效方法。通过分离集合的实现和遍历逻辑,迭代器模式不仅提高了代码的灵活性,还增强了代码的可维护性。在 Java 集合框架中,迭代器模式有着广泛的应用场景,它极大简化了集合的遍历操作,降低了代码复杂性。

道可道非常道 1219

迭代器设计模式

迭代器设计模式(Iterator)是一种结构型设计模式。该模式提供一种方法顺序访问一个聚合对象(如:JDK中的容器对象ArrayList等)中各个元素,而又不暴露该对象的内部表示。

Keiissland的博客 695

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

行为设计模式 -迭代器设计模式 迭代器设计模式中的一种行为模式。迭代器模式用于提供遍历一组对象的标准方法。Iterator模式广泛用于Java Collection Framework。Iterator接口提供遍历集合的方法。 目录[隐藏] 1迭代器设计模式 1.1迭代器模式示例 1.2迭代器设计模式重点 1.3JDK中的迭代器设计模式 ...

YunWisdom 616

迭代器设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 ! 目录 1.简介 2.什么是迭代器设计模式 3.实施迭代器设计模式 4.内部和外部迭代器 4.1。 内部迭代器 4.2。 外部迭代器...

最佳 Java 编程 131

19【迭代器设计模式】

迭代器设计模式(Iterator Pattern):它提供一种按顺序访问容器中对象的元素,而又无须暴露该容器的内部表示。迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内部元素的组成结构;迭代器模式的核心是把容器中的元素的迭代抽离到迭代器中,提供一致访问的接口;1)访问一个容器对象的内容而无须暴露他的内部表示2)为遍历不同的容器结构提供一个统一的访问(迭代)接口。

緑水長流*z 1065

【设计模式】Java设计模式 - 迭代器模式

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。

qq_43843951的博客 657
上一篇: 自己手动实现 KVO(来源:Glow 技术团队博客)
下一篇: iOS 开发中常用的一些宏
FirstBloodFB
博客等级 码龄12年 7粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值