6 迭代器模式总结 迭代器模式是一种使用频率非常高的设计模式,通过引入迭代器可以将数据的遍历功能从聚合对象中分离出来,聚合对象只负责存储数据,而遍历数据由迭代器来完成。由于很多编程语言的类库都已经实现了迭代器模式,因此在实际开发中,我们只需要直接使用Java、C#等语言已定义好的迭代器即可,迭代器已经成为我们操作聚合对象的基本工具之一。 1. 主要优点
5 JDK内置迭代器 为了让开发人员能够更加方便地操作聚合对象,在Java、C#等编程语言中都提供了内置迭代器。在Java集合框架中,常用的List和Set等聚合类都继承(或实现)了java.util.Collection接口,在Collection接口中声明了如下方法(部分): package java.util; public interface Collection<E> e
4 使用内部类实现迭代器 在迭代器模式结构图中,我们可以看到具体迭代器类和具体聚合类之间存在双重关系,其中一个关系为关联关系,在具体迭代器中需要维持一个对具体聚合对象的引用,该关联关系的目的是访问存储在聚合对象中的数据,以便迭代器能够对这些数据进行遍历操作。 除了使用关联关系外,为了能够让迭代器可以访问到聚合对象中的数据,我们还可以将迭代器类设计为聚合类的内部类,JDK
3 完整解决方案 为了简化AbstractObjectList类的结构,并给不同的具体数据集合类提供不同的遍历方式,Sunny软件公司开发人员使用迭代器模式来重构AbstractObjectList类的设计,重构之后的销售管理系统数据遍历结构如图4所示: 图4 销售管理系统数据遍历结构图 (注:为了简化类图和代码,本结构图中只提供一个具体聚合类和具体迭代器类) 在图4中
2 迭代器模式概述 在软件开发中,我们经常需要使用聚合对象来存储一系列数据。聚合对象拥有两个职责:一是存储数据;二是遍历数据。从依赖性来看,前者是聚合对象的基本职责;而后者既是可变化的,又是可分离的。因此,可以将遍历数据的行为从聚合对象中分离出来,封装在一个被称之为“迭代器”的对象中,由迭代器来提供遍历聚合对象内部数据的行为,这将简化聚合对象的设计,更符合“单一职责原则”的要求。
20世纪80年代,那时我家有一台“古老的”电视机,牌子我忘了,只记得是台黑白电视机,没有遥控器,每次开关机或者换台都需要通过电视机上面的那些按钮来完成,我印象最深的是那个用来换台的按钮,需要亲自用手去旋转(还要使点劲才能拧动),每转一下就“啪”的响一声,如果没有收到任何电视频道就会出现一片让人眼花的雪花点。当然,电视机上面那两根可以前后左右移动,并能够变长变短的天线也是当年电视机的标
如图所示大的div固定在第一个,其中1234div是for循环出来的,这种布局能实现吗?或者有没有更好的方案
问题内容: 我决定开发一个Android应用程序,该应用程序使用的技术与以前看到的应用程序非常相似。我想将多个按钮按下组合在一起,以等同于不同的不同文本结果。 六个点-盲文应用程序(实际使用的应用程序) 我正在制作的这款本机盲文应用程序具有6个不同的按钮,我希望每种独特的组合都能带给我不同的字母。例如:我想按一下按钮1来简单地给我带来字母“ A”。然后,连续按下按钮1和按钮2会给我带来字母“ C”
问题内容: 在Java中遍历所有DOM元素的最有效方法是什么? 像这样,但是对于当前的每个DOM元素呢? 问题答案: 基本上,您可以通过两种方式遍历所有元素: 1.使用递归 (我认为是最常见的方式): 2. 使用带有as参数的方法 避免递归 : 我认为这些方式都很有效。 希望这可以帮助。
问题内容: 我正在使用具有一些奇怪结构的JSON数据,例如: 我想创建一些JavaScript,将这些数据重组为适当的JSON结构,以使“列”数组值成为“数据”数组值的键。因此,在运行JS进程后,数据类似于以下内容: 完成JSON重组的JavaScript最佳做法是什么?我可以使用JQuery,Foundation JS等JS框架完成此任务吗? 问题答案: newjson是您的新对象,j是您的js
问题内容: 我正在尝试创建一个基本模板以显示所选实例的字段值及其名称。可以将其视为表格式的该实例的值的标准输出,在第一列中具有字段名称(如果在字段上指定,则为),在第二列中具有该字段的值。 例如,假设我们具有以下模型定义: 我希望将其像这样在模板中输出(假定具有给定值的实例): 我要实现的目标是能够将模型的实例传递给模板,并能够在模板中动态地对其进行迭代,如下所示: 有没有一种经过批准的简洁方法?
问题内容: 我想按顺序对数据帧中的财务数据执行自己的复杂操作。 例如,我正在使用以下来自的 MSFT CSV文件: 然后,我执行以下操作: 那是最有效的方法吗?考虑到对熊猫速度的关注,我认为必须有一些特殊的函数来迭代这些值,使它们也可以检索索引(可能通过生成器来提高内存效率)?不幸的是,只能逐列进行迭代。 问题答案: 熊猫的最新版本现在包括用于遍历行的内置函数。 或者,如果你想更快地使用它 但是,
问题内容: 我们都知道您由于以下原因而无法执行以下操作: 但这显然有时有效,但并非总是如此。这是一些特定的代码: 当然,这导致: 即使没有多个线程。无论如何。 解决此问题的最佳方法是什么?如何在不引发此异常的情况下循环地从集合中删除项目? 我还在这里使用任意值,不一定是an t,因此您不能依赖。 问题答案: 是安全的,您可以这样使用它: 注意,这是在迭代过程中修改集合的唯一安全方法。如果在进行迭代
问题内容: 我有一个要迭代的ArrayList。遍历它时,我必须同时删除元素。显然,这引发了。 解决此问题的最佳实践是什么?我应该先克隆列表吗? 我删除的不是循环本身的元素,而是代码的另一部分。 我的代码如下所示: 可能打电话; 问题答案: 两种选择: 创建要删除的值的列表,将其添加到循环中的列表中,然后在最后调用 在迭代器本身上使用该方法。请注意,这意味着你不能使用增强的for循环。 作为第二个
问题内容: 我正在尝试获取Firebase中嵌套节点的密钥,但不确定如何执行此操作。 例如在这种情况下: 例 我怎么知道1之内有2,3,4? 我正在考虑将值分别放在Firebase中的列表中。但是,有没有更聪明的方法呢?是否有更有效的方法来获取Firebase中所有嵌套节点的密钥? 问题答案: 在Android中 允许访问此快照的所有直接子级。可以在本机for循环中使用: 在iOS中 斯威夫特3: