设计模式--迭代器模式

C++设计模式—迭代器模式 迭代器模式简述 定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。又称作游标(Cursor)。迭代器模式是一种对象行为型模式 迭代器的模式结构图 外部迭代器与外部迭代器: ①内部迭代器:指的是由迭代器自己来控制下一个元素的步骤,即当客户端利用迭代器读取当前元素后,迭代器的当前元素自动移到一下个元素,而客户端无法干预。 ②外部迭代器:则客户端控制迭代下一个元素的步骤... 阅读详情

简介

迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。

在迭代器模式中,提供了一个外部的迭代器来对聚合对象进行访问和遍历,迭代器定义了一个访问该聚合元素的接口,并且可以跟踪当前遍历的元素,了解哪些元素已经遍历过而哪些没有。迭代器的引入,将使得对一个复杂聚合对象的操作变得简单。
在迭代器模式中应用了工厂方法模式,抽象迭代器对应于抽象产品角色,具体迭代器对应于具体产品角色,抽象聚合类对应于抽象工厂角色,具体聚合类对应于具体工厂角色。

角色

迭代器模式有如下几个角色:
Iterator(抽象迭代器):它定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法,例如:用于获取第一个元素的first()方法,用于访问下一个元素的next()方法,用于判断是否还有下一个元素的hasNext()方法,用于获取当前元素的currentItem()方法等,在具体迭代器中将实现这些方法。
ConcreteIterator(具体迭代器):它实现了抽象迭代器接口,完成对聚合对象的遍历,同时在具体迭代器中通过游标来记录在聚合对象中所处的当前位置,在具体实现时,游标通常是一个表示位置的非负整数。
Aggregate(抽象聚合类):它用于存储和管理元素对象,声明一个createIterator()方法用于创建一个迭代器对象,充当抽象迭代器工厂角色。
ConcreteAggregate(具体聚合类):它实现了在抽象聚合类中声明的createIterator()方法,该方法返回一个与该具体聚合类对应的具体迭代器ConcreteIterator实例。

说明 :
1)Iterator :迭代器接口,是系统提供,含义 hasNext、next、remove
2)ConcreteIterator:具体的迭代器类,管理迭代。
3)Aggregate :一个统一的聚合接口,将客户端和具体聚合解耦。
4)ConcreteAggreage :具体的聚合持有对象集合,并提供一个方法,返回一个迭代器,该迭代器可以正确遍历集合
5)Client:客户端,通过Iterator和Aggregate依赖子类。

各个角色之间结构关系如下:
在这里插入图片描述

简单示例

1.创建Iterator(抽象迭代器)

public interface Iterator {
    public boolean hasNext();
    public Object next();
}

2.创建ConcreteIterator(具体迭代器)

public class NameIterator implements Iterator {
    int index;
    Letter letter = new Letter();
    @Override
    public boolean hasNext() {
        if (index < letter.names.length) {
            return true;
        }
        return false;
    }

    @Override
    public Object next() {
        if (this.hasNext()){
            return letter.names[index++];
        }
        return null;
    }
}

3.因为是简单示例,Aggregate(抽象聚合类)与ConcreteAggregate(具体聚合类)暂时用一个简单实现

public class Letter {
    public String names[] = {"W","L","Y","X"};
    public Iterator getIterator(){
        return new NameIterator();
    }
}

4.创建Client(Main)

public class IteratorMain {
    public static void main(String[] args) {
        Letter letter = new Letter();
        for (Iterator iterator=letter.getIterator();iterator.hasNext();){
            String name = (String) iterator.next();
            System.out.println("Name is :" + name);
        }
    }
}
设计模式系列(十三)迭代器模式(Iterator Pattern) 设计模式系列(十三)迭代器模式(Iterator Pattern)     迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露器内部的表示。也就是说,迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露其内部的表示,把游走的任务放在迭代器上,而不是聚合上,这样就简化了聚合的接口和实现,也让责任各得其所。     学过面向对象编程语言的朋友一定对迭代器这个设计深有 阅读详情

相关推荐

【Java设计模式】Java设计模式之(八)迭代器模式(Iterator Pattern)

本文目录 一、迭代器概述 1.1 优缺点 1.2 使用场景 1.3 注意事项 二、代码实现 2.1 通用类图 2.2 代码实现 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。迭代器模式属于行为型模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 一、迭代器概述 意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。 主要解决:不同的方式来遍历整个整合对象。 何时使用:遍历一个聚

No8g攻城狮的博客 805

迭代器模式(Iterator)及代码实现

模式定义: 生活中的例子 代码中的例子(何时该使用此模式): 该模式关键的角色: 该模式的主要优缺点如下: 和 其他模式 的 比较: 示例代码部分 总结: 相关链接: http://c.biancheng.net/view/1383.html https://refactoringguru.cn/design-patterns/chain-of-responsibility ...

rgc_520_zyl的博客 447

C语言|深入浅出讲解int转换为float全过程(附2017年统考大题案例)

int转换为float类型为什么会发生精度损失? 精度损失的详细过程究竟是什么样的? 什么样情况float会发生精度损失?没有弄懂2017年浮点数统考大题? 这一篇用2017年统考大题案例帮你更深的理解浮点数的存储规则。

DADONGOOO的博客 1万+

迭代器模式的原理和实现

迭代器模式(Iterator Design Pattern),也叫作游标模式(Cursor Design Pattern)。 在开篇中我们讲到,它用来遍历集合对象。这里说的“集合对象”也可以叫“容器”“聚合对象”,实际上就是包含一组对象的对象,比如数组、链表、树、图、跳表。迭代器模式将集合对象的遍历操作从集合类中拆分出来,放到迭代器类中,让两者的职责更加单一。 迭代器是用来遍历容器的,所以,一个完整的迭代器模式一般会涉及容器和容器迭代器两部分内容。为了达到基于接口而非实现编程的目的,容器又包含容器接口、容器

鸭梨的博客 914

TLSv1.0与TLSv1.1安全漏洞深度解析与实战修复指南

本文深度解析TLSv1.0与TLSv1.1的安全漏洞,包括POODLE和BEAST攻击原理,并提供实战修复指南。通过禁用老旧协议、配置安全加密套件和网络层防护措施,有效提升系统安全性。文章还针对无法立即升级的场景,给出了补偿性防御方案,帮助管理员全面应对传输层安全风险。

weixin_29322855的博客 206

实验三 Gmapping建图

自主移动机器人第三次实验课,内容包括:(1)turtlebot的gmapping建图;(2)rosbag的使用;(3)gazebo中的gmapping建图。

lj164567487的博客 4648

您的设计模式——迭代器模式【Iterator Pattern】

周五下午,我正在看技术网站,第六感官发觉有人在身后,扭头一看,我 C,老大站在背后,赶忙站起来, “王经理,你找我?” 我说。“哦,在看技术呀。有个事情找你谈一下,你到我办公室来一下。” 老大说。 到老大办公室,“是这样,刚刚我在看季报,我们每个项目的支出费用都很高,项目情况复杂,人员情况也不简单,我看着也有点糊涂,你看,这是我们现在还在开发或者维护的 103 个项目,你能不能先把这些项目信息重

557

声纹识别实战:用Python从零搭建一个简易声纹验证系统(附完整代码)

本文是一份详细的声纹识别实战指南,教你使用Python从零搭建一个简易的声纹验证系统。文章涵盖了从音频采集、预处理、MFCC特征提取,到基于高斯混合模型(GMM)的建模与验证全流程,并提供了完整的代码实现,帮助开发者快速掌握这项生物特征识别核心技术。

ik6789012的博客 230

23种设计模式之迭代器模式(Iterator Pattern)

本篇文章将23种设计模式中的迭代器模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 2万+

DC-DC电源芯片SY8303电路设计

SY8303高效率同步降压DC-DC转换器。这款芯片特别适用于需要较大负载电流(高达3A)的应用。SY8303在较宽的输入电压范围(4.5V至40V)内工作,能够将输入电能高效地转换为输出电能。此外,为使运行更为稳定,SY8303集成了主要的开关和同步开关,其导通电阻(RDS(ON))非常低,可以最大限度地减少导通损耗。一些特性,如短路保护、热关断以及自动恢复等,也有助于增强其可靠性和耐用性。

LuDvei的博客 9671

15. GD32E230定时器实战:基于TIMER5的1秒LED闪烁中断配置详解

本文详细讲解了如何在GD32E230微控制器上配置TIMER5定时器,实现精准的1秒LED闪烁中断。内容涵盖从时钟开启、参数计算、中断设置到服务函数编写的完整流程,重点解析了预分频值与周期值的配置方法,帮助开发者掌握硬件定时器的核心应用。

weixin_29092787的博客 135

设计模式迭代器模式(IteratorPattern)

核心模块:迭代器角色(定义访问和遍历元素的接口),具体迭代器角色,容器角色,具体容器角色 所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git 使用场景:外部对象访问内部聚合对象; 优点:将存储数据和遍历数据分开,符合单一职责原则; 缺点:新聚合类,就要增加新的迭代器类;增加系统复杂性; /** * C

didiao11300的专栏 719

097、Zephyr RTOS驱动开发实战:传感器驱动(陀螺仪)

I2C速率别设太高:LSM6DSO支持最高400kHz,但实际布线有寄生电容时,400kHz容易出错。工业产品我统一用100kHz,稳定压倒一切。FIFO水印值要计算:假设ODR=6.66kHz,每150us产生一组数据,如果水印设32组,则每4.8ms触发一次中断。这个间隔要大于I2C读取耗时(实测约200us),否则中断堆积。电源纹波敏感:陀螺仪对电源噪声敏感,特别是3.3V供电时。我遇到过因为DC-DC纹波太大,陀螺仪输出噪声从0.1dps飙升到2dps。

m0_50546716的博客 118

设计模式(Design pattern)之迭代器模式(Iterator Pattern)

本文介绍了Java中的迭代器设计模式实现。迭代器模式提供了一种顺序访问聚合对象元素的方法,同时隐藏其内部结构。文章展示了完整的代码示例,包括抽象迭代器接口(MachineIterator)、聚合角色接口(MachineGather)及其实现类(MachineGatherImpl)。具体实现中,Machine类表示设备对象,MachineImpl类实现了迭代器逻辑,通过hasNext()和next()方法遍历集合。最后通过CustomerRun类的main方法演示了如何使用迭代器遍历设备集合。该模式属于行为型

RR1335 之代码才是动力源 260

基于Dijkstra算法的共享单车调度优化系统设计与实现

根据最新统计数据,全球共享单车市场规模已超过300亿美元,中国作为最大的共享单车市场,日订单量超过5000万次。Dijkstra算法由荷兰计算机科学家Edsger W. Dijkstra于1956年提出,用于解决带权有向图中的单源最短路径问题。本文详细介绍了基于Dijkstra算法的共享单车调度优化系统的设计与实现。本文将详细介绍基于Dijkstra算法的共享单车调度优化系统的设计与实现,采用Java 17、Spring Boot 3.x等最新技术栈。

2201_76125393的博客 618

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【设计模式】GoF设计模式之迭代器模式(Iterator Pattern)

迭代器模式是一种行为型设计模式,其核心思想是由业务类生成一个迭代器,通过迭代器可以以某种逻辑遍历,访问业务类实例中特定集合中的元素。 业务类实例中的集合可以有不同的遍历逻辑,对于不同的遍历逻辑,可以生成不同的迭代器。

YoseZang的博客 809

假人有限元模型

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

设计模式之迭代器模式

简介:迭代器模式(Iterator Pattern)是 行为型模式。它可以让用户透过特定的接口巡访容器中的每一个元素而不用了解底层的实现。 优点: 1、它支持以不同的方式遍历一个聚合对象。 2、迭代器简化了聚合类。 3、在同一个聚合上可以有多个遍历。 4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。 缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应...

倪先生的博客 129

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

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

Java设计模式——迭代器模式【Iterator Pattern】

Java设计模式、迭代器模式、Iterator Pattern

scorpio的博客 503

设计模式之 迭代器模式(Iterator Pattern) Java实现

  所谓迭代器模式,就是把集合的数据和遍历分开 让遍历集合依赖于迭代器,而不依赖于具体的集合 从而可以达到代码复用 java中的增强for循环就是迭代器模式的应用,要使用增强for循环语法的集合,就要实现java.util.Iterator接口。 在迭代器模式中,需要几个角色 Iterator(迭代器) ConcreteIterator(具体的迭代器) Aggregate(集合) ...

Lu_1u的博客 546

【设计模式】——迭代器模式(Iterator Pattern)

迭代器模式(Iterator Pattern)是一种行为设计模式,它为访问一个聚合对象(如列表、集合等)中的元素提供了一种统一的方法,同时又不暴露其内部表示。通过迭代器模式,算法与聚合对象的结构相分离,增加了代码的灵活性和可重用性。

J^T的博客 1162

23种设计模式——迭代器模式 (Iterator Pattern)详解

本文介绍了23种设计模式之——迭代器模式 (Iterator Pattern)的说明及使用

Meteors.的博客 980

设计模式-迭代器模式(Iterator Pattern)

迭代器模式 定义 提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。 类型 行为型。 角色 抽象迭代器(Iterator):抽象迭代器负责定义访问和遍历元素的接口。 具体迭代器(ConcreteIterator):提供具体的元素遍历行为。 抽象容器(Aggregate):负责定义提供具体迭代器的接口。 具体容器(ConcreteAggregate):创建具体...

kaven 1643

设计模式:迭代器模式(Iterator Pattern)

迭代器模式是一种行为设计模式, 让你能在不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素。

TechNomad的博客 837

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

是一种提供共享所有权(shared ownership)的互斥量,它允许多个线程同时获取共享锁(shared lock),进行读操作,或者独占锁(unique lock),进行写操作。迭代器模式(Iterator Pattern)是一种常用的设计模式,它在软件开发中用于顺序访问一个聚合对象中的各个元素,而不需要暴露其内部的表现。迭代器模式的应用场景非常广泛,它的核心价值在于提供了一种抽象和解耦的方式,使得客户端代码可以独立于数据结构的具体实现,从而提高了代码的灵活性和可维护性。

wesigj的博客 1897

设计模式之迭代器模式详解(Iterator Pattern)

认识迭代器模式 在系统开发中,集合对象内部表示各不相同。底层构造也尽不相同。对于这些对象,我们希望在不暴露其底层和内部表示的同时,可以使外部客户访问其中元素。 迭代器模式就为这一需求提供了极其优雅的实现,接下来就让我们来认识认识迭代器模式: 迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部的结构。 迭代器模式(Iterato...

Superman_peng的博客 537

设计模式——迭代器模式(Iterator Pattern)+ Spring相关源码

用于顺序访问集合对象的元素,使用者不需要知道集合对象的底层表示。

码鹿的记录 1099
上一篇: 设计模式--命令模式
下一篇: 设计模式--观察者模式
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值