迭代器是针对集合对象而生的,对于集合对象而言,必然涉及到集合元素的添加删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作也放在集合对象中,但这样的话,集合对象就承担太多的责任了,面向对象设计原则中有一条是单一职责原则,所以我们要尽可能地分离这些职责,用不同的类去承担不同的职责。迭代器模式就是用迭代器类来承担遍历集合元素的职责。分离集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。

迭代器模式的角色构成
(1)迭代器角色(Iterator):定义遍历元素所需要的方法,一般来说会有这么三个方法:取得下一个元素的方法next(),判断是否遍历结束的方法hasNext()),移出当前对象的方法remove(),
(2)具体迭代器角色(Concrete Iterator):实现迭代器接口中定义的方法,完成集合的迭代。
(3)容器角色(Aggregate): 一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等
(4)具体容器角色(ConcreteAggregate):就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。
静态迭代子和动态迭代子:
静态迭代子由聚集对象创建,并持有聚集对象的一份快照,在产生后这个快照的内容就不再变化,客户端可以继续修改原聚集的内容,但是迭代子对象不会反映出聚集的新变化;
静态迭代子的好处是它的安全性和简易性,换言之,静态迭代子易于实现,不容易出现错误,但是由于静态迭代子将原聚集复制了一份,因此它的短处是对时间和内存资源的消耗;
动态迭代子与静态迭代子完全相反,在迭代子被产生之后,迭代子还保持着对聚集元素的引用,因此,任何对原聚集内容的修改都会在迭代子对象上反映出来。
完整的动态迭代子不容易实现,但是简化的动态迭代子并不难实现。我们遇到的迭代子就是简化的动态迭代子。
“我们相信人人都可以成为一个IT大神,现在开始,选择一条阳光大道,助你入门,学习的路上不再迷茫。这里是北京尚学堂,初学者转行到IT行业的聚集地。"

迭代器 java_百战程序员:Java设计模式之迭代器模式相关推荐

  1. 黑马程序员——Java设计模式

    ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...

  2. 【Java设计模式】迭代器模式

    迭代器模式 1.概述 定义: 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示. 2.结构 迭代器模式主要包含以下角色: 抽象聚合(Aggregate)角色:定义存储.添加.删 ...

  3. 尚学堂百战程序员1573题---答案总结第一章 初识Java

    第一章 初识Java 1. 你学习编程的目的是什么?学习编程最快的办法是什么? 答:我觉得的我喜欢计算机,我认为计算机是一个很神奇的东西,所以我要学计算机专业,同时,我认为学计算机学编程是一个比较容易 ...

  4. Java设计模式(访问者模式-迭代器模式-观察者模式-中介者模式)

    Java设计模式Ⅶ 1.访问者模式 1.1 访问者模式概述 1.2 代码理解 2.迭代器模式 2.1 迭代器模式概述 2.2 代码理解 3.观察者模式 3.1 观察者模式概述 3.2 代码理解 4.中 ...

  5. 百战程序员试题与答案(仅供参考)

    JAVA基础篇 1.你学习编程的目的是什么?学习编程最快的办法是什么? 答案:我觉得多敲代码,多思考学的能快一点 2.程序员的职业规划是什么?我怎么能拿到10万年薪,30万年薪,50万年薪? 答案:努 ...

  6. 程序员内功-设计模式篇

    一. 什么是设计模式 纠结了好久,今天终于下定决心开始写设计模式系列,因为这个系列章节确实不好写,在这之前,也看了好多关于设计模式的博客.视频.书籍等,最后结合自己的理解,亲自动手实操代码,完成该章节 ...

  7. 黑马程序员Java教程学习笔记(五)

    学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(五) 日期时间:Date.Sim ...

  8. 黑马程序员Java零基础视频教程_下部(P135-P200)

    黑马程序员Java零基础视频教程_下部(P135-P200) 1 多线程 1.1 什么是多线程? 1.2 多线程的并发与并行 1.3 多线程的实现方式 1.3.1 继承Thread类的方式进行实现 1 ...

  9. 黑马程序员——Java字符流、字节流IO流

    黑马程序员--Java字符流.字节流Io流 ---------------------- <a href="http://www.itheima.com"target=&qu ...

最新文章

  1. python读取文件夹图片_读取文件夹里的图片,并且与标签对应
  2. 视频开发(即时通讯平台)
  3. org.tinygroup.databasebuinstaller-数据库结构及元数据自动创建
  4. eclipse java source_Eclipse中查看JAVA源代码显示SOURCE NOT FOUND解决办法
  5. 诗与远方:无题(二十九)
  6. CPU使用时间问题测试
  7. mysql更改安装路径命令_如何修改mysql的安装路径
  8. python 写excel 保留空格_通过自动填充列中的空格来操作excel表的Python脚本
  9. Android不发版也能在线修Bug?——AndFix 框架
  10. 2018个人年度工作总结与2019工作计划(互联网)
  11. 团队项目--“我爱淘”校园二手书店 NABC分析
  12. Sparse Local Patch Transformer for Robust Face Alignment and Landmarks Inherent Relation Learning
  13. 越睡越累,原因竟然是这个!
  14. 如何服务器上的打印机共享文件夹,用局域网设置共享打印机的方法有哪些?
  15. stm32 ADC hal库实现
  16. 通过宏代码自动解除excel工作表格保护
  17. 数据结构系列三---[一周leetcode刷题记录3.7-3.13]
  18. Apple Final Cut Pro X 10.5 视频编辑软件 下载 百度网盘
  19. BCGSoft BCGControlBar for .NET托管代码工具包
  20. 项目管理 : 如何在项目中强调紧迫感?

热门文章

  1. 详解mysql什么时候不走索引
  2. java net php_Java.netPHP比较 | php外包与php技术服务商
  3. ssrf漏洞内网渗透_渗透小白看了也能明白的SSRF
  4. android有关医疗实现功能,基于Android的智能医疗监测系统的设计与实现_问答库
  5. oracle内存表与临时表,Oracle 临时表之临时表空间组(TTG)
  6. Kotlin静态方法定义和调用
  7. c语言锐龙,AMD官方:锐龙5000抗热可以达到95°C 没问题!
  8. c语言编程游戏开代码错误,[蓝桥杯][历届试题]数字游戏 (C语言代码)(兄弟们帮我看一下为什么运行错误86%)...
  9. Java常用设计模式————桥接模式
  10. the java home_the java_home environment variable is not defined correctly