设计模式--Iterator迭代器模式(Java例子)

Java设计模式---迭代器模式(Iterator)介绍 本文介绍了迭代器模式(Iterator)在Java中的应用。迭代器是一种行为型设计模式,提供统一访问集合元素的方式,同时隐藏集合内部实现细节。主要内容包括:1. 迭代器结构:Collection接口继承Iterable,提供iterator()方法;2. 核心方法:hasNext()、next()、remove();3. 本质:解耦遍历逻辑与数据结构,支持多种遍历方式;4. 组成角色:抽象迭代器、具体迭代器、抽象聚合器、具体聚合器;5. 实际应用:Java集合框架、JDBC ResultSet、文件读取等; 阅读详情

转自:http://www.blogjava.net/flustar/archive/2007/12/04/iterator.html

Iterator模式定义:
提供一个方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示。
这个模式在java的类库中已经实现了,在java中所有的集合类都实现了Conllection接口,而Conllection接口又继承了Iterable接口,该接口有一个iterator方法,也就是所以的集合类都可以通过这个iterator方法来转换成Iterator类,用Iterator对象中的hasnext方法来判断是否还有下个元素,next方法来顺序获取集合类中的对象。今天面试考到设计模式,我愣是没答上来,我晕死,自己这几天刚学的东西,自己也都理解,可一到考试的时候不是忘了就是回答的不准确,自己也不清楚到底是为什么,哎,伤心。。。。。。,下面是Iterator模式的结构图:

 在这个结构图中的Aggregate(此单词是集合的意思)抽象类也可以定义成接口。下面给出一个例子来说明Iterator模式的使用。
import java.util.ArrayList;

interface Iterator<E>{
public void first();
public void next();
public E currentItem();
public boolean isDone();
}


class ConcreteIterator<E> implements Iterator<E>{

   private ConcreteAggregate<E> agg;
   private int index=0;
   private int size=0;

   public ConcreteIterator( ConcreteAggregate<E> aggregate) {
      this.agg=aggregate;
      this.index=0;
      this.size=aggregate.size();
   }

   public E currentItem() {
       return agg.getElement(index);
   }

   public void first() {
       index=0;
   }

   public boolean isDone() {
       if(index>=size){
           return true;
       }
       return false;
    }

    public void next() {
       if(index<size){
           index++;
       }
     }
}


abstract class Aggregate<E>{
    protected abstract Iterator createIterator();
}


class ConcreteAggregate<E> extends Aggregate<E>{
   private ArrayList<E> arrayList=new ArrayList<E>();
   public Iterator createIterator() {
       return new ConcreteIterator<E>(this);
   }
   public void add(E o){
        arrayList.add(o);
   }
   public E getElement(int index) {

         if (index<arrayList.size()) {

             return arrayList.get(index);

         } else {

               return null;

           }

     }

    public int size(){

       return arrayList.size();

    }
}

 

 

public class Client {    //客户区代码

   public static void main(String[] args) {
      ConcreteAggregate<String> aggregate=new ConcreteAggregate<String>();
      aggregate.add("A");
      aggregate.add("B");
      aggregate.add("C");
      aggregate.add("D");
      aggregate.add("E");
      Iterator iterator=aggregate.createIterator();
      for(iterator.first();!iterator.isDone();iterator.next()){
           System.out.println(iterator.currentItem());
      }
    }
}
输出结果:
A
B
C
D
E
在这个例子中,我们按照Iterator模式的结构图来创建的例子,我们创建的集合ConcreteAggregate可以存放任何类型的数据,然后使用createIterator方法转换成Iterator对象,使用Iterator对象来按顺序显示集合中的内容。这个模式在Java的jdk中是这样实现的,所以的集合类都实现了Iterable接口,这个接口中有一个iterator方法可以把集合类的对象转换成Iterator类的对象。明白这个原理可以更好的理解Java中的集合类和迭代器,根据这个可以创建功能更加强大的集合类。
小结:Iterator模式主要用在当一个集合类中的元素经常变动时,而不需要改变客户端的代码。

【比如当iterator.next()函数的意义改成每次获取下面间隔两个元素后的一个元素时,上面的客户去代码即main函数中代码可以永远不改变,也就是我们只需要修改迭代器类或集合类的代码就行了,不用该客户类的代码】

 

设计模式|迭代器模式(Iterator) 迭代器模式(Iterator)是一种行为设计模式,它允许在不暴露集合底层表示的情况下,顺序访问一个集合中的元素。这种模式在需要逐个处理集合中的元素,而又不希望暴露其内部结构的情况下非常有用。 阅读详情

相关推荐

设计模式--迭代器模式java例子

设计模式--迭代器模式java例子

Java迭代器iterator用法

并发编程共享模型篇 并发编程概览 进程与线程 Java线程 共享模型之管程 共享模型之内存 共享模型之无锁 共享模型之不可变 共享模型之工具 共享模型之管程 原理之 Monitor(锁) 原理之伪共享 模式篇—正确姿势 同步模式之保护性智停 同步模式之Blking 同步模式之顺 序控制 异步模式之生产者消费者 异步模式之工作线程. 终止模式之两阶段终止模式 线程安全单例 享元模式 同步模式之保护性暂停 应用篇—结合实际 效率 限制 互斥 同步和异步 缓存 分治 统筹 定时 缓存

m0_57472099的博客 408

Python设计模式之迭代器模式原理与用法实例分析

主要介绍了Python设计模式之迭代器模式原理与用法,结合具体实例形式分析了迭代器模式的概念、原理、定义及使用方法,代码注释说明简单易懂,需要的朋友可以参考下

Java 集合源码解析(1):Iterator

Java, Android 开发也有段时间了,当初为了早点学 Android,Java 匆匆了解个大概就结束了,基础不够扎实。 虽然集合框架经常用,但是一直没有仔细看看原理,仅止于会用,不知道为什么要这么做。 这段时间就开始 Java 集合的源码学习。 点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ Ja...

weixin_34414196的博客 359

电机控制个人学习路线及专业书籍资源分享

个人学习电机控制的学习路线,和相关专业书的电子文档分享

weixin_45182459的博客 9912

深入傅里叶级数与傅里叶变换:从基础到应用

傅里叶分析为我们提供了一种理解信号频率结构的强大工具。从傅里叶级数到傅里叶变换,再到快速傅里叶变换(FFT),其理论与应用紧密结合,对现代科学技术的发展意义非凡。如果你对信号处理、数据分析或工程计算感兴趣,傅里叶分析是必须掌握的基础工具。希望本文能帮助你对傅里叶分析有更深入的理解!如果有问题或想法,欢迎在评论区讨论!

qq_56683019的博客 3518

Java多线程(六):wait(),notify()和notifyAll()

wait(),notify()和notifyAll()介绍 1.wait() 使当前线程等待,直到另一个线程调用notify(),notifyAll()或者中断,当前线程调用wait()之前必须持有锁,调用wait()之后会释放锁。等到当前线程重新获得锁,恢复执行。 只能在同步方法调用wait()。 2.notify() 唤醒一个正在等待锁的线程,如果有多个线程在等待锁,那么任意唤醒其中一个wai...

weixin_30389003的博客 295

手把手教你用Verilog实现AT24C64的I2C读写(附完整仿真流程)

本文详细介绍了如何使用Verilog HDL设计AT24C64 EEPROM的I2C控制器,并配合ModelSim完成完整的仿真验证流程。内容涵盖I2C协议解析、Verilog状态机设计、AT24C64读写操作实现,以及仿真波形分析和调试技巧,为FPGA开发者提供了一套完整的EEPROM控制解决方案。

3c4x5z6v7b的博客 844

设计模式学习笔记(十三)—Iterator迭代器模式

Iterator模式定义: 提供一个方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示。 这个模式在java的类库中已经实现了,在java中所有的集合类都实现了Conllection接口,而Conllection接口又继承了Iterable接口,该接口有一个iterator方法,也就是所以的集合类都可以通过这个iterator方法来转换成Iterator类,用Iterator对象中的h...

flustar 168

FUXA实战:5步搞定基于Web的SCADA系统搭建(含Node.js版本避坑指南)

本文提供了一份基于开源工具FUXA搭建Web版SCADA系统的实战指南。文章重点解析了从环境准备到生产部署的五个核心步骤,并特别强调了Node.js版本选择对西门子S7 PLC通信兼容性的关键影响,帮助开发者避开常见陷阱,快速构建工业监控界面。

weixin_29172963的博客 138

亚马逊商品评论爬取与情感分析实战:Python+BeautifulSoup高效解析(附反爬技巧)

本文详细介绍了使用Python和BeautifulSoup库高效爬取亚马逊商品评论并进行情感分析的完整实战流程。文章从环境搭建、核心代码编写入手,重点讲解了如何通过设置请求头、添加延迟等防封策略应对反爬机制,确保数据抓取的稳定性。最后,利用TextBlob库对评论文本进行情感分析,并通过可视化图表直观展示产品口碑,为电商选品与市场调研提供数据支持。

weixin_29046611的博客 1164

设计模式(一)之迭代器模式

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

liaguaya的博客 102

保姆级教程:用PROGRAM_FTDI搞定Xilinx FPGA的JTAG调试器(基于FT232/FT2232/FT4232)

本文详细介绍了如何使用FT232/FT2232/FT4232系列芯片通过PROGRAM_FTDI工具配置Xilinx FPGA的JTAG调试器。从芯片选型、驱动安装到固件烧写和Vivado验证,提供了完整的实操指南和避坑要点,帮助开发者低成本实现高效调试。

weixin_29271053的博客 2152

[HIT]哈工大2021软件构造知识点理解(2)——七大设计模式

不管怎么看,以我现在的水平,我都不可能在一篇文章中说明白一个设计模式,更别说七个。但如果你完全不知道这七大模式都是什么,那么这篇文章或许对引领你建立对这六种模式理解的框架有所帮助。 其实Java开发共有23种模式,关于这23种模式优快云上优秀的文章比比皆是,但因为考试只针对其中六种,故在此为那些正在学习和明年将学习的学弟们写一篇入门的不能再入门的文章。 1)Adapter模式:Adapter模式也叫做适配器模式,什么是这个所谓的适配器模式呢。我来用最通俗的语言举个例子:...

weixin_52286779的博客 552

Simulink仿真状态空间中状态变量时域响应

起因 今天老师留了一道关于状态空间变量响应的题,于是想用simulink仿真,一开始使用state-space模块,但是发现它只能输出y,没办法显示状态变量的变化情况。然而状态变量之间的关系都可以表示为一阶微分方程组,因此我们考虑在Simulink中搭建微分方程组来求解这个问题。 微分方程组 x1˙=x2x2˙=−4x1−5x2+1(1)\dot{x_1}=x_2\\ \dot{x_2}=-4x_...

ZYunfei的博客 7445

【Python进阶】VSCode Python开发完全指南:从环境配置到高效调试

本文通过15个实战案例,系统讲解VSCode进行Python开发的环境配置、编码技巧、调试方法及性能优化,帮助初学者快速构建专业开发环境。

赶紧的博客 3736

JAVA系列-设计模式-迭代器模式

定义: 提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。 我们的List遍历就是用迭代器模式实现的。 类图 package Iterator; /** * 迭代器定义访问和遍历元素的接口。 * @author Administrator * */ public interface Iterator { Object next();

SDN_SUPERUSER的专栏 1062

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

迭代器模式是一种设计模式,它允许我们以统一的方式遍历聚合对象中的元素,提高代码灵活性和可重用性。该模式通过将遍历逻辑与聚合对象分离,降低了耦合度,并遵循了单一职责、开闭、接口隔离和依赖倒置等设计原则。在实际应用中,迭代器模式可根据需求进行扩展和变种,如多级迭代器、可重置迭代器和线程安全迭代器等。然而,它也存在性能开销和内存占用的局限性。在分布式系统、数据流处理和函数式编程等领域,迭代器模式具有广泛应用前景。未来,随着技术和框架的发展,迭代器模式将继续发挥重要作用,助力构建高效、可维护的软件系统。

新手村长的专栏 1322

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

迭代器模式是一种设计模式,它用于提供一种方法来访问一个容器对象中的各个元素,而又不暴露该对象的内部表示。在迭代器模式中,我们定义一个抽象的迭代器类,它包含两个方法:一个是hasNext()方法,用于判断是否还有下一个元素;另一个是next()方法,用于获取下一个元素。然后,每个容器类都实现自己的迭代器类,以访问容器中的元素。

miaoyl的博客 2496

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

ProgramNovice的博客 1098

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

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

小威的博客 2万+

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

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

kaven 1643

Java 设计模式——迭代器模式

本文介绍了迭代器模式的相关知识。

代码星辰的博客 2957

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

Java设计模式之 Iterator 迭代器模式 设计模式本身就是一门玄学,看不懂很正常,一次看懂就不是很正常了,多看多练才是关键 int [] array = {1 , 2 , 3 , 4 , 5 , 6}; for(int i = 0;i < array.length;i++) { System.out.println(array[i]); } 看这个代码是不是平平无奇,是的,它就是平平无奇的遍历和输出而已,其中变量 i 的作用就是确定当前对数组的索引,然后将这里的循环变量i的作用抽象化

qq_45108095的博客 262

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

行为型模式 提供一个方法,可以顺序访问一个对象内部的各个元素,不需要知道内部构造。现在基本很少自己实现迭代器了,基本成熟的框架或者强大的JDK都会给出访问的方法,比如说java中iterator。这样做主要是进一步封装对象内部的结构,让行为和结构想耦合。这个不举例子了,用过iterator这个的小伙伴应该都清楚,就是不停的next,去访问下一个元素。 参考文档:https://juejin.im/...

zhaoyang10的专栏 215

【设计模式】迭代器模式(Iterator)详解

本文介绍了迭代器模式的设计思想及其实现。迭代器模式通过提供统一接口来顺序访问聚合对象中的元素,而不暴露其内部结构,实现遍历与集合实现的解耦。文章详细解析了迭代器模式的四个核心角色(迭代器接口、具体迭代器、聚合接口、具体聚合),并通过Java代码示例演示了如何自定义集合和迭代器。同时比较了外部迭代和内部迭代的差异,分析了迭代器模式的优缺点及适用场景,并指出其与访问者模式的区别。该模式适用于需要统一遍历不同集合、隐藏复杂数据结构或提供多种遍历策略的情况。

经天纬地,格物致理 1103
上一篇: c++基础---c/c++编程-内存分配5大区(总结)
下一篇: Ogre各种场景管理器以及和插件关系深入分析
HNFXS985
博客等级 码龄14年 219粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值