迭代器模式和Java

大家好,在本文中,我们将检查Iterator Pattern 。 我知道你们中许多人已经使用过一种设计模式,但是也许您没有意识到它是模式,或者不知道它的巨大价值。 根据《 Head First Design 》一书:

迭代器模式提供了一种在不暴露其底层表示的情况下顺序访问聚合对象的元素的方法。
哇啊? 好吧,它表示无论您使用什么数据结构(数组,列表,哈希表等),如果实现此模式,都可以以相同的方式遍历它。 它为您提供了一种访问数据结构(聚合)元素的统一方法,但您不必知道哪种数据结构 您正在遍历...很好! 同样,它在Iterator对象上而不是在数据结构上设置迭代的责任,从而简化了数据结构中的编码。 让我们检查一下Iterator模式的经典类图:

Iterator Pattern的实际类图进行了一些更改,特别是在Iterator类(接口)中,现在我们将在稍后看到不同的方法,但是首先让我们回顾一下以前的每个类(或接口) ):

  • Aggregate :这是我们数据结构的基类(或接口),您可以将其视为java.util.Collection接口,它为集合类定义了许多方法。
  • ConcreteAggregate :这是我们将要迭代的具体数据结构,例如java.util.ArrayList , java.util.Vector等。
  • 迭代器迭代器的基类(或接口)。 您可以通过java.util.Iterator在Java 中找到一个。 您会注意到Java版本有不同的方法,我们将在本文后面讨论。 在这里,您定义了遍历数据结构所需的de方法。
  • ConcreteIterator :当您要遍历不同的数据结构时,需要不同的迭代器。 因此,concreteIterator是要遍历的数据结构的Iterator。

现在,让我们看一下Iterator Pattern的Java实现。 下图是使用Architexa的免费代码理解工具生成的 ,它显示了Java Collections Framework的某些类之间的关系,在这里我们可以看到类似于经典类图的结构:

上图仅显示了Java模式的一种实现,还有很多,但它们始终使用java.util.Iterator接口; 这是在用Java进行编码时应在Iterator Pattern的实现中使用的接口。 让我们比较两个图:

经典图
骨料
混凝土骨料
迭代器
ConcreteIterator

请注意,Java示例中Iterator对象的方法与经典类图中的方法不同:

  • 没有+ First()方法。 如果需要转到第一个元素,则必须实例化一个新的迭代器。
  • + IsDone()方法已重命名为+ hasNext()。
  • + Next()和+ CurrentItem()已合并到+ next()中。
  • + remove()方法已添加。

因此,如果您不得不使用不同的数据结构,并且需要一种统一的方式遍历它们和/或访问它们的项,请考虑一下迭代器模式:

//... in a class/*** Traverse a list, hashtable, vector, etc. what ever that implements* the Iterator Pattern*/public void traverse(Iterator iter){while(iter.hasNext()){System.out.println(iter.next());}}

当然,您始终必须为数据结构创建ConcreteIterator类,但是如果您使用的是
Java Collections Framework ,它已经完成。

最后一件事,请记住最重要的OO原则: 始终使用满足您需求的最简单解决方案,即使它不包含pattern

资源:

Freeman Eric和Freeman Elisabeth以及Sierra Kathy和Bates Bert(2004)。 头先设计模式 。 美利坚合众国:O'Reilly Media,Inc.

参考:来自Java和ME博客的JCG合作伙伴 Alexis Lopez的Iterator Pattern和Java 。

翻译自: https://www.javacodegeeks.com/2013/01/iterator-pattern-and-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不使用JavaScript实现菜单的打开和关闭

我在写有菜单栏的网页时,基本都会用响应式设计来适配移动端,例如把不重要的菜单选项隐藏,或者创建一个菜单按钮来控制的菜单的打开和关闭之类的。而我之前一直是使用JavaScript来实现菜单的打开和关闭的,但最近在网上看到有人使用…

芝枝.计算机与人文科学,计算机与人文科学

计算机与人文科学(2013-03-13 13:24:17)标签:文化战争名著《静静的顿河》可以说从它诞生起便没有平静过,围绕它的作者所引起的争议,就像它获得诺贝尔文学奖一样,撼动文坛,有人指控肖洛霍夫是个骗子,《静静的…

HTML5 Canvas游戏开发实战 PDF扫描版

HTML5 Canvas游戏开发实战主要讲解使用HTML5 Canvas来开发和设计各类常见游戏的思路和技巧,在介绍HTML5 Canvas相关特性的同时,还通过游戏开发实例深入剖析了其内在原理,让读者不仅知其然,而且知其所以然。在本书中,除…

css3图片垂直居中

图片相对父元素垂直居中, css3属性给父级元素设置 display: -webkit-box; -moz-box-align: center; -webkit-box-align: center; -moz-box-pack: center; -webkit-box-pack: center; 需要注意的是: 父级元素要有确定的高度!

网络局域网看不到其它计算机,局域网中看不到其它计算机怎么办

通过网上邻居或查看网络计算机时,看不到局域网中其它计算机,这是怎么回事呢?下面是学习啦小编给大家整理的一些有关看不到局域网中其它计算机的解决方法,希望对大家有帮助!局域网中看不到其它计算机的解决方法打开“控制面板”-“网络和Inte…

计算机二级高级应用考题,2016计算机二级MSOFFICE高级应用考试真题

2016计算机二级MSOFFICE高级应用考试真题离2016上半年的计算机等级考试只有一个多月了,为了帮助大家尽快考试过关,小编整理了计算机二级office考试题,希望能帮助到大家!(1)下列叙述中正确的是A)一个算法的空间复杂度大,则其时间复…

DBMS-数据库设计与E-R模型:E-R模型、约束、E-R图、E-R扩展特性、E-R图转换为关系模式、UML建模...

设计过程概览 1. 设计阶段 最初阶段:刻画未来数据库用户的数据需求,产品为用户需求规格说明; 概念设计阶段(conceptual-design phase):(关注描述抽象数据及其联系,通常使用实体-联系…

Java虚拟机:如何判定哪些对象可回收?

版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 在堆内存中存放着Java程序中几乎所有的对象实例,堆内存的容量是有限的,Java虚拟机会对堆内存进行管理,回收已经“死去”的对象&…

css3中的box-sizing属性的使用

box-sizing属性用来定义元素的width和height所表示的区域,该属性一般有三种值:content-box、border-box、inherit。 其中inherit表示box-sizing的值应该从父元素继承。 content-box和border-box的主要区别就是元素的width和height的值包不包括border、padding这两…

中南大学在线考试答案计算机基础,中南大学《计算机基础》在线考试题库(267题)(有答案).doc...

中南大学《计算机基础》在线考试题库(267题)(有答案).doc 计算机基础01 总共89题共100分 一. 单选题 (共35题,共35分) 1. 域名服务器DNS的主要功能是( )。 (1分) A.通过请求及回答获取主机和网络相关的信息 B.查询主机的MAC地址 C.为主机自动命名 D.合理分配IP地址 ★标准答案&…

CSS制作简单loading动画

曾经以为,loading的制作需要一些比较高深的web动画技术,后来发现大多数loading都可以用“障眼法”做出来。比如一个旋转的圆圈,并不都是将gif图放进去,有些就是画个静止图像,然后让它旋转就完了。gif图也可以&#xff…

机器学习:多变量线性回归

************************************** 注:本系列博客是博主学习Stanford大学 Andrew Ng 教授的《机器学习》课程笔记。博主深感学过课程后,不进行总结非常easy遗忘,依据课程加上自己对不明确问题的补充遂有此系列博客。本系列博客包含线性…

经过路由无法找到计算机,电脑无法启动服务提示系统找不到指定的路径(图)

原标题:"电脑无法启动服务提示系统找不到指定的路径"相关电脑问题教程分享。 - 来源:191路由网。众所周知,使用电脑的时候需要启动一些服务才能使用相关的功能,但是如果出现无法启动服务项,并且提示“错误3:…

详细解读css中的浮动以及清除浮动的方法

对于前端初学者来说,css浮动部分的知识是一块比较难以理解的部分,下面我将把我学习过程中的心得分享给大家。 导读: 1.css块级元素讲解 2.css中浮动是如何产生的 3.出现浮动后,如何清除浮动(本文将涉及到多种清除浮动…

CSS多列布局(实例)

前言 一列布局二列布局三列布局 1 一列布局 一列布局&#xff1a; HTML部分 <!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <title>一列布局</title> </head> <body> <div class"head">…

大头贴计算机教程,推荐!自家电脑也能拍大头贴的秘密

您可能感兴趣的话题&#xff1a;美图拍拍核心提示&#xff1a;一直都超爱拍大头贴&#xff0c;喜欢每张都能换不同的框框&#xff1b;喜欢可以直接看到效果&#xff0c;做出满意的动作&#xff1b;喜欢将大头贴和朋友们分享……不过夏日炎炎的&#xff0c;出门太麻烦&#xff0…

css选择器的综合使用

代码实现&#xff1a; 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 <meta charset"utf-8">5 <title>css的综合使用</title>6 <style>7 div {8 colo…

启动tomcat时 一闪而过解决方法

【前文】 在实际开发中一般都是eclipsetomcat(也许还会用到tomcat的插件)&#xff0c;我们只需要在eclipse中单击servers上的按钮就可以成功启动tomcat了&#xff0c; 但是如果想在tomcat的安装目录下 双击startup.bat启动时却一闪而过了。这是为什么呢&#xff08;tomcat启动失…

复习HTML CSS(5)

n <meta>标记 <meta>的主要作用&#xff0c;是提供网页的源信息。比如&#xff1a;指定网页的搜索关键字 <meta>标记有两个属性&#xff1a;http-equiv和name。 1、 http-equiv属性 功能&#xff1a;模拟http协议文件头信息&#xff0c;当信息从服务器端传…

『cs231n』卷积神经网络工程实践技巧_下

概述 计算加速 方法一&#xff1a; 由于计算机计算矩阵乘法速度非常快&#xff0c;所以这是一个虽然提高内存消耗但是计算速度显著上升的方法&#xff0c;把feature map中的感受野&#xff08;包含重叠的部分&#xff0c;所以会加大内存消耗&#xff09;和卷积核全部拉伸成为向…