【设计模式-行为型】迭代器模式

embedded/2025/2/1 14:17:18/

一、什么是迭代器模式

        迭代器模式,顾名思义,同样的为了让大家更加了解啥是迭代器。我们通过电影情结来说明,不知道大家有没有看过一个剧烧脑的科幻大片--《盗梦空间》。影片讲述了由造梦师(莱昂纳多·迪卡普里奥扮演的)带领特工团队进入他人梦境,从潜意识中盗取机密并重塑他人梦境的故事。其中个东西叫做造梦机,无论是谁(稍微不太准确),加以培训(使用造梦机)都可以进入多层梦境。这就是个典型的迭代器模式。盗梦空间中团队成员通过造梦机在不同的梦境层次之间穿梭,这种机制很好地体现了迭代器模式的核心思想。每次使用“造梦机”进入下一层梦境,都可以看作是对梦境层次集合的一次遍历操作。这种模式特别适用于需要遍历集合的场景。

        可以这么说,谁使用了 造梦机都会 进入迭代模式(梦境),并做一些处理,植入一些潜意识或者获得一些信息。

二、为什么使用迭代器模式

迭代器模式使得团队成员可以灵活地在不同的梦境层次之间穿梭,完成任务操作,而无需深入了解梦境层次的内部结构。

  1. 访问聚合对象的内容:当需要访问一个聚合对象的内容,而不需要暴露其内部的表示时,迭代器模式非常适用。团队成员通过造梦机访问梦境层次的内容,而无需了解梦境层次的具体实现细节。

  2. 支持多种遍历方式:当需要为聚合对象提供多种遍历方式时,迭代器模式可以提供统一的接口。团队成员可以通过造梦机选择不同的遍历方式,如正向遍历、反向遍历、跳跃遍历等,而不需要修改梦境层次结构的代码。

  3. 为遍历不同的聚合结构提供统一接口:当需要遍历不同类型的聚合结构时,迭代器模式可以提供统一的接口。团队成员可以使用统一的接口来遍历不同的梦境层次结构,而无需关心具体的结构实现。

三、迭代器模式示例

  1. 迭代器(Iterator 造梦机规范:通过造梦机,团队成员可以在不同的梦境层次之间穿梭。造梦机提供了遍历梦境层次的逻辑。

    public interface Iterator {boolean hasNext();Object next();
    }
  2. 具体迭代器(ConcreteIterator)

    具体的梦境穿梭机制:造梦机的具体实现,提供了进入下一层梦境(next())和检查是否还有下一层梦境(hasNext())的功能。public class DreamLevelIterator implements Iterator { private List<String> levels; private int index; public DreamLevelIterator(List<String> levels) { this.levels = levels; this.index = 0; } @Override public boolean hasNext() { return index < levels.size(); } @Override public Object next() { if (hasNext()) { return levels.get(index++); } return null; } }
  3. 聚合接口(Aggregate 梦境层次结构:定义了创建迭代器的方法,即如何通过造梦机进入梦境。

    public interface Aggregate {Iterator createIterator();
    }
  4. 具体聚合类(ConcreteAggregate 具体的梦境层次:实现了聚合接口,提供了梦境层次的集合,即团队成员可以进入的不同梦境。

    import java.util.ArrayList;
    import java.util.List;public class DreamLevels implements Aggregate {private List<String> levels = new ArrayList<>();public DreamLevels() {levels.add("第一层梦境");levels.add("第二层梦境");levels.add("第三层梦境");levels.add("第四层梦境");}@Overridepublic Iterator createIterator() {return new DreamLevelIterator(levels);}}

    通过这个代码示例,我们可以清晰地看到迭代器模式的核心优势。迭代器模式通过将集合的遍历逻辑从集合本身分离出来,提供了一种统一的方式访问不同类型的集合。这种模式特别适用于需要遍历集合的场景,使得客户端代码可以独立于集合的类型。


http://www.ppmy.cn/embedded/158645.html

相关文章

基于Python的药物相互作用预测模型AI构建与优化(下.代码部分)

四、特征工程 4.1 分子描述符计算 分子描述符作为量化分子性质的关键数值,能够从多维度反映药物分子的结构和化学特征,在药物相互作用预测中起着举足轻重的作用。RDKit 库凭借其强大的功能,为我们提供了丰富的分子描述符计算方法,涵盖了多个重要方面的分子性质。 分子量…

音视频多媒体编解码器基础-codec

如果要从事编解码多媒体的工作&#xff0c;需要准备哪些更为基础的内容&#xff0c;这里帮你总结完。 因为数据类型不同所以编解码算法不同&#xff0c;分为图像、视频和音频三大类&#xff1b;因为流程不同&#xff0c;可以分为编码和解码两部分&#xff1b;因为编码器实现不…

【2024年华为OD机试】(C卷,100分)- 检查是否存在满足条件的数字组合 (Java JS PythonC/C++)

一、问题描述 题目描述 给定一个正整数数组&#xff0c;检查数组中是否存在满足规则的数字组合。 规则&#xff1a;A B 2C 输入描述 第一行输出数组的元素个数。 接下来一行输出所有数组元素&#xff0c;用空格隔开。 输出描述 如果存在满足要求的数&#xff0c;在同…

1905电影网中国地区电影数据分析(二) - 数据分析与可视化

文章目录 前言一、数据分析1. 数据分析代码实现2. 分析后的数据截图2.1 描述性分析结果数据2.2 类别分布分析结果数据2.3 模式识别分析结果数据2.4 时间序列分析结果数据2.4.1 每年的电影发布数量2.4.2 按年份的评分趋势 2.5 相关性分析结果数据 二、数据可视化1. 描述性分析数…

007 JSON Web Token

文章目录 https://doc.hutool.cn/pages/jwt/#jwt%E4%BB%8B%E7%BB%8D JWT是一种用于双方之间安全传输信息的简洁的、URL安全的令牌标准。这个标准由互联网工程任务组(IETF)发表&#xff0c;定义了一种紧凑且自包含的方式&#xff0c;用于在各方之间作为JSON对象安全地传输信息。…

小程序的协同工作与发布

1.小程序API的三大分类 2.小程序管理的概念&#xff0c;以及成员管理两个方面 3.开发者权限说明以及如何维护项目成员 4.小程序版本

EtherCAT主站IGH-- 25 -- IGH之fsm_slave_scan.h/c文件解析

EtherCAT主站IGH-- 25 -- IGH之fsm_slave_scan.h/c文件解析 0 预览一 该文件功能`fsm_slave_scan.c` 文件功能函数预览二 函数功能介绍`fsm_slave_scan.c` 中主要函数的作用1. `ec_fsm_slave_scan_state_start`2. `ec_fsm_slave_scan_state_address`3. `ec_fsm_slave_scan_stat…

初学stm32 --- FreeRTOS移植

目录 移植前准备 1. 基础工程 2. FreeRTOS 源码 添加 FreeRTOS 文件 1. 添加 FreeRTOS 源码 2. 将文件添加到工程 3. 添加头文件路径 4. 添加 FreeRTOSConfig.h 文件 (1) FreeRTOSConfig.h 获取途径一 (2) FreeRTOSConfig.h 获取途径二 (3) FreeRTOSConfig.h 获取途径…