迭代器 java_百战程序员:Java设计模式之迭代器模式
迭代器是针对集合对象而生的,对于集合对象而言,必然涉及到集合元素的添加删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作也放在集合对象中,但这样的话,集合对象就承担太多的责任了,面向对象设计原则中有一条是单一职责原则,所以我们要尽可能地分离这些职责,用不同的类去承担不同的职责。迭代器模式就是用迭代器类来承担遍历集合元素的职责。分离集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。
迭代器模式的角色构成
(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设计模式之迭代器模式相关推荐
- 黑马程序员——Java设计模式
------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...
- 【Java设计模式】迭代器模式
迭代器模式 1.概述 定义: 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示. 2.结构 迭代器模式主要包含以下角色: 抽象聚合(Aggregate)角色:定义存储.添加.删 ...
- 尚学堂百战程序员1573题---答案总结第一章 初识Java
第一章 初识Java 1. 你学习编程的目的是什么?学习编程最快的办法是什么? 答:我觉得的我喜欢计算机,我认为计算机是一个很神奇的东西,所以我要学计算机专业,同时,我认为学计算机学编程是一个比较容易 ...
- Java设计模式(访问者模式-迭代器模式-观察者模式-中介者模式)
Java设计模式Ⅶ 1.访问者模式 1.1 访问者模式概述 1.2 代码理解 2.迭代器模式 2.1 迭代器模式概述 2.2 代码理解 3.观察者模式 3.1 观察者模式概述 3.2 代码理解 4.中 ...
- 百战程序员试题与答案(仅供参考)
JAVA基础篇 1.你学习编程的目的是什么?学习编程最快的办法是什么? 答案:我觉得多敲代码,多思考学的能快一点 2.程序员的职业规划是什么?我怎么能拿到10万年薪,30万年薪,50万年薪? 答案:努 ...
- 程序员内功-设计模式篇
一. 什么是设计模式 纠结了好久,今天终于下定决心开始写设计模式系列,因为这个系列章节确实不好写,在这之前,也看了好多关于设计模式的博客.视频.书籍等,最后结合自己的理解,亲自动手实操代码,完成该章节 ...
- 黑马程序员Java教程学习笔记(五)
学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(五) 日期时间:Date.Sim ...
- 黑马程序员Java零基础视频教程_下部(P135-P200)
黑马程序员Java零基础视频教程_下部(P135-P200) 1 多线程 1.1 什么是多线程? 1.2 多线程的并发与并行 1.3 多线程的实现方式 1.3.1 继承Thread类的方式进行实现 1 ...
- 黑马程序员——Java字符流、字节流IO流
黑马程序员--Java字符流.字节流Io流 ---------------------- <a href="http://www.itheima.com"target=&qu ...
最新文章
- python读取文件夹图片_读取文件夹里的图片,并且与标签对应
- 视频开发(即时通讯平台)
- org.tinygroup.databasebuinstaller-数据库结构及元数据自动创建
- eclipse java source_Eclipse中查看JAVA源代码显示SOURCE NOT FOUND解决办法
- 诗与远方:无题(二十九)
- CPU使用时间问题测试
- mysql更改安装路径命令_如何修改mysql的安装路径
- python 写excel 保留空格_通过自动填充列中的空格来操作excel表的Python脚本
- Android不发版也能在线修Bug?——AndFix 框架
- 2018个人年度工作总结与2019工作计划(互联网)
- 团队项目--“我爱淘”校园二手书店 NABC分析
- Sparse Local Patch Transformer for Robust Face Alignment and Landmarks Inherent Relation Learning
- 越睡越累,原因竟然是这个!
- 如何服务器上的打印机共享文件夹,用局域网设置共享打印机的方法有哪些?
- stm32 ADC hal库实现
- 通过宏代码自动解除excel工作表格保护
- 数据结构系列三---[一周leetcode刷题记录3.7-3.13]
- Apple Final Cut Pro X 10.5 视频编辑软件 下载 百度网盘
- BCGSoft BCGControlBar for .NET托管代码工具包
- 项目管理 : 如何在项目中强调紧迫感?
热门文章
- 详解mysql什么时候不走索引
- java net php_Java.netPHP比较 | php外包与php技术服务商
- ssrf漏洞内网渗透_渗透小白看了也能明白的SSRF
- android有关医疗实现功能,基于Android的智能医疗监测系统的设计与实现_问答库
- oracle内存表与临时表,Oracle 临时表之临时表空间组(TTG)
- Kotlin静态方法定义和调用
- c语言锐龙,AMD官方:锐龙5000抗热可以达到95°C 没问题!
- c语言编程游戏开代码错误,[蓝桥杯][历届试题]数字游戏 (C语言代码)(兄弟们帮我看一下为什么运行错误86%)...
- Java常用设计模式————桥接模式
- the java home_the java_home environment variable is not defined correctly