17、迭代器模式

HeadFirst设计模式(模式总览速查) 本文用于记录本人阅读完HeadFirst设计模式一书后对此书的总结,总结系个人理解并简化提炼,方便使用设计模式时速查,如有错漏,请积极指出,本人将虚心接受并及时改正。 阅读详情

定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示
在这里插入图片描述
【例】定义一个可以存储学生对象的容器对象,将遍历该容器的功能交由迭代器实现,涉及到的类如
下:在这里插入图片描述

public class Student {
    public Student(String name, String number) {
        this.name = name;
        this.number = number;
    }

    private String name;
    private String number;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", number='" + number + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }
}

//抽象迭代器角色接口
public interface StudentIterator {
    //判断是否还有元素
    boolean hasNext();
    //获取下一个元素
    Student next();
}

//具体迭代器类
public class StudentIteratorImpl implements StudentIterator {
    private List<Student> list;
    //用来记录遍历时的位置
    private int position=0;

    public StudentIteratorImpl(List<Student> list) {
        this.list = list;
    }

    @Override
    public boolean hasNext() {
        return position < list.size();
    }

    @Override
    public Student next() {
        //从集合中获取指定位置的元素
        Student currentStudent = list.get(position);
        position++;
        return currentStudent;
    }
}

//抽象聚合角色接口
public interface StudentAggregate {
    //添加学生功能
    void addStudent(Student stu);
    //删除学生功能
    void removeStudent(Student stu);
    //获取迭代器对象功能
    StudentIterator getStudentIterator();
}

//具体聚合(ConcreteAggregate)角色
public class StudentAggregateImpl implements StudentAggregate {
    private List<Student> list=new ArrayList<>();
    @Override
    public void addStudent(Student stu) {
        list.add(stu);
    }

    @Override
    public void removeStudent(Student stu) {
        list.remove(stu);
    }

    @Override
    public StudentIterator getStudentIterator() {
        return new StudentIteratorImpl(list);
    }
}

public class Client {
    public static void main(String[] args) {
        //创建聚合对象
        StudentAggregateImpl aggregate=new StudentAggregateImpl();
        //添加元素
        aggregate.addStudent(new Student("张三","001"));
        aggregate.addStudent(new Student("李四","002"));
        aggregate.addStudent(new Student("王五","003"));
        aggregate.addStudent(new Student("赵六","004"));
        //遍历聚合对象

        //1,获取迭代器对象
        StudentIterator iterator = aggregate.getStudentIterator();
        //2,遍历
        while (iterator.hasNext()){
            Student student = iterator.next();
            System.out.println(student);
        }
    }
}

在这里插入图片描述
在这里插入图片描述

Head First设计模式(完整高清版).pdf Head First设计模式(完整高清版).pdf,涵盖了各种宝贵的设计思想! 立即下载

相关推荐

C#读取CAD文件(dwg/dxf)并处理

项目要求识别CAD图纸(图纸内容与现实事物比例是1:1)中的内容,并提取出一些关键信息。这里的CAD图纸是指CAD文件,包含多种格式,dwg/dxf/dwf/stl/pdf等等。识别其中内容,主要指文件中的图元信息(也叫实体Entity),指线段、圆弧、矩形等图形元素。得到图元基础信息(比如长度、坐标、粗细)后,进一步做处理(如得到交点、得到线段间间隔、圆弧与线段切点等)。听起来有点难,因为作为软件工程师,对CAD相关事物并不了解,它是未知的;

三千幻想乡 1万+

【HeadFirst】设计模式

系列文章目录 `headfirst 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分

weixin_42310794的博客 6333

[LaTeX] 使用natbib宏包实现参考文献的“作者-年份”引用格式及常见编译错误排查

本文详细介绍了在LaTeX中使用natbib宏包实现参考文献“作者-年份”引用格式的完整流程。从宏包配置、.bib文件准备到标准编译步骤,重点解析了常见的“Bibliography not compatible with author-year”错误成因,并提供了彻底清理辅助文件等解决方案,帮助用户高效排版符合学术规范的参考文献。

moon9的博客 481

Activity的四种启动模式

Activity的四种启动模式 附加:返回栈是一组存放Activity集合的栈,用来管理Activity。当Activity位于栈顶时,Activity则会显示给用户(系统总是显示栈顶的Activity给用户),Activity可叠加,每次创建一个新的Activity,新的Activity则会入栈;若调用finish()方法或按下返回键(bankspace),此时Activity会出栈(Activity会销毁)。 standard模式 默认情况下,Activity的启动方式为standard模式,在此模

FlippedY的博客 927

【HDR】曝光融合(Exposure Fusion)

在曝光融合(Exposure Fusion)算法问世之前,多曝光序列合成用于显示的HDR需要两个步骤,第一步是将多张不同曝光的低动态范围图像合成为HDR(例如Debevec提出的加权融合方法),通常HDR为12bit或者16bit;第二步是通过tonemapping对高动态范围HDR进行压缩以支持低动态范围显示设备(例如Durand提出的基于双边滤波的tonemapping算法),一般会压缩至8bit。

专注人工智能,主攻CV 1万+

实战复盘:如何用ATE(自动测试设备)搞定一颗MCU的功能测试全流程

本文详细解析了如何利用ATE(自动测试设备)完成MCU功能测试的全流程,涵盖测试需求分析、测试向量生成、ATE测试程序开发及调试实战。通过真实案例分享,帮助工程师高效解决芯片测试中的常见问题,提升Functional Test的准确性和效率。

weixin_30872157的博客 485

HeadFirst设计模式(一)策略者模式

最近在看HeadFirst设计模式一书,作为一个半路出家的程序员,感觉很多东西需要学习,学习的路程中有些东西学了当时觉得理解了,但日常工作中没有使用到渐渐的自己就忘记了。----------------------上面就是写者系列的博客的原因,主要是为了巩固知识,忘记在那个博主那边看过这么一句话,知识学了后总结了才变成自己的。 策略者模式----定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 当然这只是理论的东西,说实话我现在都没理解这个理论是啥,下面我用..

whyrookie的博客 542

GB28181协议实战:5分钟搞定海康摄像头SIP注册失败问题(附Wireshark抓包分析)

本文详细解析了海康摄像头在GB28181协议下SIP注册失败的7个关键原因及解决方案,包括网络可达性、鉴权参数、NAT穿越等核心问题。通过Wireshark抓包分析,提供快速定位方法,帮助工程师高效解决SIP注册失败问题,提升实时图像联调效率。

weixin_29212867的博客 557

HeadFirst设计模式之策略模式

设计模式的策略模式讲解。

qq_44936410的博客 787

高通平台蓝牙学习-- 基于WCN6750 Bluetooth 5.2的讲解

摘要:蓝牙5.2解决方案WCN6750具备多项先进特性:完全兼容5.2标准及ANT+协议,支持2Mbps高速BLE和长距离传输;采用射频集成方案,与WLAN共享天线并支持5G并发;内置功率放大器,支持Class1/2传输;提供双音频流和Slimbus接口优化。其HCI UART接口支持3.2Mbps速率,通过BlueZ协议栈实现蓝牙5.2功能,包括2Mbps模式和长距离传输,符合核心规范要求。(149字)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 3万+

AI产品经理面试宝典第94天:RAG知识库构建与预处理策略面试指南

本文深入解析RAG知识库构建的核心挑战与预处理策略,涵盖文档格式转换、问答对生成及自动化测试全流程,为AI产品经理提供面试必备的实战方法论与避坑指南,助你精准应对技术深度类问题。

打造全国最全的AI Agent开发知识领域的博客 312

17、迭代器模式(Iterator Pattern)

迭代器模式(Iterator Pattern)

qq_38304915的博客 954

内容创作全流程自动化:OpenClaw+大模型搞定选题+写稿+多平台发布

本文介绍了一套基于OpenClaw的全自动化内容创作流水线方案,帮助垂直领域创作者摆脱重复劳动。该方案将内容生产拆解为选题生成、内容撰写、格式适配、多平台发布四个模块,通过工作流引擎串联执行。系统能自动采集热榜生成选题、调用大模型撰写结构化内容、适配不同平台格式要求,并通过API+浏览器自动化实现多平台发布,全程只需人工最终审核。作者分享了各模块的实现细节,包括热榜采集、内容结构化生成、Markdown转换和发布策略,并提供了工作流编排方法。这套方案能为创作者每天节省约3小时,同时保证内容质量和发布效率。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 49

【17】迭代器模式(Iterator Pattern)

  一、引言   在上篇博文中分享了我对命令模式的理解,命令模式主要是把行为进行抽象成命令,使得请求者的行为和接受者的行为形成低耦合。在这一章中,将介绍一下迭代器模式。   二、迭代器模式的介绍   迭代器是针对集合对象而生的。对于集合对象而言,必然涉及到集合元素的添加删除操作,同时也肯定支持遍历集合元素的操作。我们此时可以把遍历操作也放在集合对象中,但这样的话,集合对象就承担太多的责任了。...

weixin_34112030的博客 89

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

efm32 入门.pdf

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

第17章 迭代器模式(Iterator Pattern)

概述 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,

踏雪无痕 1331

精雕软件(JDpaint) 5.5 绿色版

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

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

迭代器模式可以使用统一的接口来遍历不同类型的集合对象,而不需要关心其内部的具体实现。

weixin_43626218的博客 719

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java 23 种设计模式-17-java 迭代器模式(Iterator Pattern)

目录 目录 迭代器模式 实际案例 定义 测试 实现方式 UML &amp; Code UML Code 系列导航 迭代器模式 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。 实际案例 类信息概览: ...

3万+

17 迭代器模式

原文转载:https://blog.youkuaiyun.com/sinat_21107433/article/details/102879383 写代码不少使用数组或者类似的集合对象吧?每次要遍历一遍数组怎么办?For 循环!或者while循环,一个一个访问每个位置的元素,直到数组末尾。STL里面甚至有专门的迭代器,针对具体的集合类对象,有对应使用的迭代器。STL的迭代器提供了丰富的遍历方法,如访问集合对象的首位元素、末位元素、指定位置的元素、下一个元素……怎么样,是不是感觉有了迭代器,遍历方法不再是难事了? 1

qq_22328661的博客 390

尚硅谷设计模式学习(17)---[迭代器模式(Iterator Pattern)]

尚硅谷传送门==>B站尚硅谷Java设计模式 ❤❤❤感谢尚硅谷❤❤❤ 最近开始计划学习一下设计模式了,加油!!! 这次的案例就是之前学习组合模式用到的案例==> 但是这次要使用的是迭代器模式 解决问题. 迭代器模式 提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,无需了解集合对象的底层表示,即:不暴露其内部的结构. 适合于集合元素是用不同的方式实现的情况 原理 Iterator : 迭代器接口,API提供的 ...

从零开始的异世界JAVA学习 278

17.迭代器模式

1.什么是迭代器? 迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不用暴露该对象的内部表示。 举个例子:电视机有好多频道,电视机就是聚合对象。而我们看电视,不考虑你电视机里的频道内部如何,我们通过遥控器来调台。这个遥控器就是迭代器,我能看电视能调台,但是又不关注你电视机内部频道是怎么处理的。 迭代器模式又叫游标模式,是一种对象行为型模式 2.迭代器模式的结构 (1)Iterator(抽象迭代器):定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法 (2)Conc..

鹏哥哥Aaa 423

17/23 迭代器模式

迭代器模式(Iterator) 提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。 如果说在JAVA和C#代码编写过程中使用最多的设计模式不是工厂,它一定是迭代器模式。 在C#中集合、数组有以下类型 Array、List、HashTable、Stack、Queue、Set、BitArray等等… 而在C#中对于集合或数组的访问方式是 foreach(var item in List) { } foreach(var item in Stack) { } ## C#

XiaoCai 1395

17.Iterator-迭代器模式

Iterator 迭代器模式 迭代器模式: 提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。 迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。 这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问. 示例类图:

龙叔的博客 1044
上一篇: 16、中介者模式
下一篇: 18、访问者模式
618GLOAL_COOK2237
博客等级 码龄6年 14粉丝 240原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值