当前位置: 首页 > news >正文

行为模式3.迭代器模式

 行为型模式

  1. 模板方法模式(Template Method Pattern)
  2. 命令模式(Command Pattern)
  3. 迭代器模式(Iterator Pattern)
  4. 观察者模式(Observer Pattern)
  5. 中介者模式(Mediator Pattern)
  6. 备忘录模式(Memento Pattern)
  7. 解释器模式(Interpreter Pattern)
  8. 状态模式(State Pattern)
  9. 策略模式(Strategy Pattern)
  10. 职责链模式(Chain of Responsibility Pattern)
  11. 访问者模式(Visitor Pattern)

迭代器模式(Iterator Pattern) 是一种行为型设计模式,它提供一种顺序访问集合对象元素的方式,而不暴露集合的内部结构。迭代器模式允许客户端按顺序访问集合中的元素,而无需直接访问集合本身。通常,当你有一个集合(如列表、队列、栈等),你希望对集合中的元素进行迭代,但又不想暴露其内部结构时,可以使用迭代器模式。

迭代器模式的主要组成部分

  1. Iterator(迭代器):迭代器接口,定义了遍历集合元素的方法,如 hasNext() 和 next()
  2. ConcreteIterator(具体迭代器):实现了Iterator接口,并定义了如何遍历具体集合中的元素。
  3. Aggregate(聚合类,也叫集合类):集合接口,提供创建迭代器对象的方法。
  4. ConcreteAggregate(具体聚合类):实现了Aggregate接口,定义了如何存储和获取集合元素。

迭代器模式的工作流程

  1. 创建迭代器:客户端通过聚合类获取迭代器实例。
  2. 遍历集合:客户端通过迭代器的方法遍历集合中的元素,使用 hasNext() 判断是否有下一个元素,使用 next() 获取当前元素。
  3. 不暴露集合的内部实现:迭代器模式让客户端能够通过标准的接口访问集合元素,而不需要知道集合的内部结构。

迭代器模式的优点

  • 封装性:集合的实现细节对客户端是隐藏的,客户端不需要关心集合如何存储数据。
  • 灵活性:可以对不同的集合类型使用相同的迭代方式。
  • 单一职责:聚合类负责存储数据,迭代器类负责遍历数据,这样做可以避免集合类本身过于复杂。

Java 示例代码

import java.util.ArrayList;
import java.util.List;// 1. 定义Iterator接口
interface Iterator {boolean hasNext();  // 判断是否有下一个元素Object next();      // 获取下一个元素
}// 2. 定义Aggregate接口(集合接口)
interface Aggregate {Iterator createIterator();  // 创建一个迭代器
}// 3. ConcreteIterator(具体迭代器)实现Iterator接口
class ConcreteIterator implements Iterator {private List<Object> items;private int position = 0;public ConcreteIterator(List<Object> items) {this.items = items;}@Overridepublic boolean hasNext() {return position < items.size();}@Overridepublic Object next() {if (this.hasNext()) {return items.get(position++);}return null;}
}// 4. ConcreteAggregate(具体集合类)实现Aggregate接口
class ConcreteAggregate implements Aggregate {private List<Object> items = new ArrayList<>();public void addItem(Object item) {items.add(item);}@Overridepublic Iterator createIterator() {return new ConcreteIterator(items);}
}// 5. 客户端使用迭代器遍历集合
public class IteratorPatternDemo {public static void main(String[] args) {// 创建一个具体的集合ConcreteAggregate aggregate = new ConcreteAggregate();aggregate.addItem("Item 1");aggregate.addItem("Item 2");aggregate.addItem("Item 3");aggregate.addItem("Item 4");// 创建迭代器Iterator iterator = aggregate.createIterator();// 使用迭代器遍历集合while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

相关文章:

行为模式3.迭代器模式

行为型模式 模板方法模式&#xff08;Template Method Pattern&#xff09;命令模式&#xff08;Command Pattern&#xff09;迭代器模式&#xff08;Iterator Pattern&#xff09;观察者模式&#xff08;Observer Pattern&#xff09;中介者模式&#xff08;Mediator Pattern…...

第8章 DMA控制器

DMA的基本概念 DMA是用硬件实现不再通过CPU的&#xff0c;计算机内存储器与I/O设备之间的直接数据传送技术。该硬件称为DMA控制器&#xff08;简称DMAC)&#xff0c;用来控制数据的输入和输出&#xff0c;复杂性堪比CPU。 DMA方式可实现: 数据存储器RAM→I/O端口的DMA读传送I/O…...

后端java开发路由接口并部署服务器(四)

一、安装IntelliJ IDEA&#xff0c;安装包下载 1、官网下载 2、网盘资源 安装包下载完成后进行傻瓜式下一步安装就可以了 打开IntelliJ IDEA&#xff0c;输入网盘资源文件内容 三、汉化处理 插件搜索chinese&#xff0c;就会找到相应的插件安装重启软件即可 四、新建后端j…...

检索增强生成 和思维链 结合: 如何创建检索增强思维链 (RAT)?

论文地址&#xff1a;https://arxiv.org/pdf/2403.05313 Github地址&#xff1a;https://github.com/CraftJarvis/RAT 想象一下&#xff0c;一个人工智能助手可以像莎士比亚一样写作&#xff0c;像专家一样推理。这听起来很了不起&#xff0c;对吧&#xff1f;但是&#xff0…...

在 SQL 中,区分 聚合列 和 非聚合列(nonaggregated column)

文章目录 1. 什么是聚合列&#xff1f;2. 什么是非聚合列&#xff1f;3. 在 GROUP BY 查询中的非聚合列问题示例解决方案 4. 为什么 only_full_group_by 要求非聚合列出现在 GROUP BY 中&#xff1f;5. 如何判断一个列是聚合列还是非聚合列&#xff1f;6. 总结 在 SQL 中&#…...

单元测试3.0+ @RunWith(JMockit.class)+mock+injectable+Expectations

Jmockit使用笔记_基本功能使用Tested_Injectable_Mocked_Expectations_jmockit.class-CSDN博客 静态变量直接赋值就好&#xff0c;没必要mock了 测试框架Jmockit集合junit使用 RunWith(JMockit.class) 写在测试案例类上的注解 Tested 在测试案例中,写在我们要测试的类上…...

STM32第十一课:STM32-基于标准库的42步进电机的简单IO控制(附电机教程,看到即赚到)

一&#xff1a;步进电机简介 步进电机又称为脉冲电机&#xff0c;简而言之&#xff0c;就是一步一步前进的电机。基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩&#xff0c;步进电机的角位移量与输入的脉冲个数严格成正…...

MotionCtrl: A Unified and Flexible Motion Controller for Video Generation 论文解读

目录 一、概述 二、相关工作 三、前置知识 1、LVDM Introduction 2、LVDM Method 3、LVDM for Short Video Generation 4、Hierarchical LVDM for Long Video Generation 5、训练细节 6、推理过程 四、MotionCtrl 1、CMCM 2、OMCM 3、训练策略 五、实验 一、概述…...

LINUX线程操作

文章目录 线程的定义LINUX中的线程模型一对一模型多对一模型多对多模型 线程实现原理线程的状态新建状态&#xff08;New&#xff09;就绪状态&#xff08;Runnable&#xff09;运行状态&#xff08;Running&#xff09;阻塞状态&#xff08;Blocked&#xff09;死亡状态&#…...

在Lua中,Metatable元表如何操作?

Lua中的Metatable&#xff08;元表&#xff09;是一个强大的特性&#xff0c;它允许我们改变表&#xff08;table&#xff09;的行为。下面是对Lua中的Metatable元表的详细介绍&#xff0c;包括语法规则和示例。 1.Metatable介绍 Metatable是一个普通的Lua表&#xff0c;它用于…...

4D LUT: Learnable Context-Aware 4D LookupTable for Image Enhancement

摘要&#xff1a;图像增强旨在通过修饰色彩和色调来提高照片的审美视觉质量&#xff0c;是专业数码摄影的必备技术。 近年来&#xff0c;基于深度学习的图像增强算法取得了可喜的性能并越来越受欢迎。 然而&#xff0c;典型的努力尝试为所有像素的颜色转换构建统一的增强器。 它…...

瑞芯微rk3568平台 openwrt系统适配ffmpeg硬件解码(rkmpp)

瑞芯微rk3568平台 openwrt系统适配ffmpeg硬件解码(rkmpp) RK3568及rkmpp介绍编译安装mpp获取源码交叉编译安装 libdrmlibdrm-2.4.89 make 方式编译(cannot find -lcairo, 不推荐)下载源码编译编译错误: multiple definition of `nouveau debug‘错误cannot find -lcairo:…...

使用SuperMap制作地形图的详细教程

一、数据准备 本示例以山东为例&#xff0c;演示如何通过SuperMap iDesktopX制作一个好看的地形图。所有数据均来源于互联网公开数据&#xff0c;如有自己项目真实数据&#xff0c;可直接跳过数据下载进入下一步。 本示例所需数据包括&#xff1a; 数据类别 数据类型 DEM数据…...

PHP Array:精通数组操作

PHP Array&#xff1a;精通数组操作 PHP&#xff0c;作为一门流行的服务器端编程语言&#xff0c;提供了强大的数组处理能力。数组是PHP中非常灵活和强大的数据结构&#xff0c;它可以存储多个相同类型的值。在PHP中&#xff0c;数组不仅可以存储数字&#xff0c;还可以存储字…...

【使用命令配置java环境变量永久生效与脚本切换jdk版本】

java配置环境变量命令与脚本切换jdk版本 新建用户环境变量永久生效 setx JAVA8_HOME "D:\Java\jdk8" setx JAVA17_HOME "d:\Java\jdk-17" setx JAVA_HOME %JAVA8_HOME% setx CLASSPATH ".;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;"…...

STM32-笔记32-ESP8266作为服务端

esp8266作为服务器的时候&#xff0c;这时候网络助手以客户端的模式连接到esp8266&#xff0c;其中IP地址写的是esp8266作为服务器时的IP地址&#xff0c;可以使用ATCIFSR查询esp8266的ip地址&#xff0c;端口号默认写333。 当esp8266作为服务器的时候&#xff0c;需要完成哪些…...

RAG(Retrieval-Augmented Generation,检索增强生成)流程

目录 一、知识文档的准备二、OCR转换三、分词处理四、创建向量数据库五、初始化语言聊天模型1.prompt2.检索链3.对话 完整代码 知识文档的准备&#xff1a;首先需要准备知识文档&#xff0c;这些文档可以是多种格式&#xff0c;如Word、TXT、PDF等。使用文档加载器或多模态模型…...

【Python学习(六)——While、for、循环控制、指数爆炸】

Python学习&#xff08;六&#xff09;——While、for、循环控制、指数爆炸 本文介绍了While、for、循环控制、指数爆炸&#xff0c;仅作为本人学习时记录&#xff0c;感兴趣的初学者可以一起看看&#xff0c;欢迎评论区讨论&#xff0c;一起加油鸭~~~ 心中默念&#xff1a;Py…...

解释一下:运放的输入失调电流

输入失调电流 首先看基础部分:这就是同相比例放大器 按照理论计算,输入VIN=0时,输出VOUT应为0,对吧 仿真与理论差距较大,有200多毫伏的偏差,这就是输入偏置电流IBIAS引起的,接着看它的定义 同向和反向输入电流的平均值,也就是Ib1、Ib2求平均,即(Ib1+Ib2)/2 按照下面…...

力扣hot100——二分查找

35. 搜索插入位置 class Solution { public:int searchInsert(vector<int>& a, int x) {if (a[0] > x) return 0;int l 0, r a.size() - 1;while (l < r) {int mid (l r 1) / 2;if (a[mid] < x) l mid;else r mid - 1;}if (a[l] x) return l;else …...

QChart实战:从零构建动态数据波形图(含完整代码与注释)

1. 环境准备与基础配置 在开始构建动态波形图之前&#xff0c;我们需要先搭建好开发环境。这里假设你已经安装了Qt Creator&#xff0c;我推荐使用5.15或更高版本&#xff0c;因为这个版本对QChart的支持最完善。如果你还没安装&#xff0c;可以直接去Qt官网下载开源版本。 首…...

4个关键步骤:全方位掌控BetterJoy让Switch手柄在PC上完美适配

4个关键步骤&#xff1a;全方位掌控BetterJoy让Switch手柄在PC上完美适配 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitco…...

Buildah多平台容器构建终极指南:使用QEMU跨架构构建Docker镜像

Buildah多平台容器构建终极指南&#xff1a;使用QEMU跨架构构建Docker镜像 【免费下载链接】buildah A tool that facilitates building OCI images. 项目地址: https://gitcode.com/gh_mirrors/bu/buildah Buildah作为专业的OCI镜像构建工具&#xff0c;为开发者提供了…...

Agisoft Metashape相机标定实战:从原理到精准操作

1. 相机标定为什么重要&#xff1f;从拍照误差说起 每次用手机拍文档时&#xff0c;边缘文字总会出现弯曲变形&#xff1b;航拍测绘时&#xff0c;明明飞行路线笔直&#xff0c;生成的模型却出现波浪形扭曲——这些问题的根源往往在于镜头畸变。就像近视眼看到的世界会有变形&a…...

技术赋能B端拓客:号码核验行业的破局与价值深耕,氪迹科技法人股东核验筛选系统,阶梯式价格

2026年&#xff0c;B端市场进入存量竞争的深水区&#xff0c;“精准获客、降本增效”不再是企业的加分项&#xff0c;而是生存发展的必选项。号码核验作为B端拓客流程的前置筛选环节&#xff0c;直接决定了线索质量、人力效能与投入回报比&#xff0c;成为影响企业拓客竞争力的…...

Simple Comic:Mac平台的开源漫画阅读解决方案

Simple Comic&#xff1a;Mac平台的开源漫画阅读解决方案 【免费下载链接】Simple-Comic OS X comic viewer 项目地址: https://gitcode.com/gh_mirrors/si/Simple-Comic 你是否曾遇到这样的困扰&#xff1a;在Mac上尝试打开漫画文件时&#xff0c;不是格式不兼容就是阅…...

论文AI率从80%降到10%以下的完整攻略:实测3款降AI率工具真实效果

论文AI率从80%降到10%以下的完整攻略&#xff1a;实测3款降AI率工具真实效果 上个月我同学发来一张知网检测报告&#xff0c;AI率87%&#xff0c;整个人都懵了。她用DeepSeek写了大部分初稿&#xff0c;没想到检测会这么高。当时距离论文提交截止不到两周&#xff0c;她问我有没…...

3分钟,零代码!让Arduino看懂你的手势——Teachable Machine硬件魔法揭秘

3分钟&#xff0c;零代码&#xff01;让Arduino看懂你的手势——Teachable Machine硬件魔法揭秘 【免费下载链接】teachablemachine-community Example code snippets and machine learning code for Teachable Machine 项目地址: https://gitcode.com/gh_mirrors/te/teachab…...

告别死记硬背!信息系统项目管理师(高项)思维导图活用法:从考前3个月到考前一天的全周期规划

信息系统项目管理师备考革命&#xff1a;用思维导图构建你的动态知识引擎 备考信息系统项目管理师&#xff08;高项&#xff09;的过程&#xff0c;常常让考生陷入两难困境&#xff1a;一方面要掌握庞杂的知识体系&#xff0c;另一方面又要应对实际工作中的时间压力。传统死记硬…...

告别繁琐!3步解锁教育资源获取新方式,效率提升10倍的高效工具

告别繁琐&#xff01;3步解锁教育资源获取新方式&#xff0c;效率提升10倍的高效工具 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 在数字化学习与教学资源管理…...