《Java设计模式及实践》—3.4 迭代器模式

举报
华章计算机 发表于 2019/07/22 13:22:32 2019/07/22
【摘要】 本节书摘来自华章计算机《Java设计模式及实践》一书中的第3章,第3.4节,[印度] 卡马尔米特·辛格(Kamalmeet Singh)[荷兰] 艾德里安·伊恩库列斯库(Adrian Ianculescu) 著[罗马尼亚] 路西安-保罗·托尔耶(Lucian-Paul Torje) 张小坤 黄 凯 贺 涛 译.

3.4 迭代器模式

迭代器模式可能是Java中最广为人知的模式之一。Java程序员在使用集合(collection)

时,并不需要关注其类型是数组、列表、集合(set)还是其他,有些人并不知道这些集合包其实是使用了迭代器模式来实现的。

我们可以以相同的方式处理集合,无论它是列表还是数组,这是因为它提供了一种迭代其元素而不暴露其内部结构的机制。更重要的是,不同类型的集合能够使用相同的统一的机制。这种机制被称为迭代器模式。

1.目的

迭代器模式提供了一种顺序遍历聚合对象元素而不暴露其内部实现的方法。

2.实现

迭代器模式基于两个抽象类或接口,可以通过成对的具体类来实现。类图如图3-5所示。

 image.png

图 3-5

迭代器模式使用了以下类:

  • Aggregate(抽象容器):应该由所有类实现的抽象类,并且可以由迭代器遍历。这对应于java.util.Collection接口。

  • Iterator(抽象迭代器):抽象迭代器是迭代器抽象类,它定义遍历容器对象的操作以及返回对象的操作。

  • ConcreteAggregate(具体容器):具体容器可以实现内部不同的结构,但会暴露处理遍历容器的具体迭代器。

  • ConcreteIterator(具体迭代器):这是处理特定具体容器类的具体迭代器。实际上,对于每个具体容器,必须实现一个具体迭代器。

每一个Java程序员在日常工作中都会使用迭代器。让我们看看如何实现迭代器。首先,定义一个简单的迭代器接口:

 image.png

然后实现一个简单的容器,它维护一个String类型数组:

 

 image.png

我们在容器中嵌套了迭代器类。这是最好的选择,因为迭代器需要访问容器的内部变量。我们可以在这里看到它的外观:

 image.png

3.适用情况和示例

如今,迭代器在大多数编程语言中都很流行,它可能是Java中使用最广泛的集合包。当使用以下循环结构遍历集合时,它也在语言级别实现:

 image.png

可以使用泛型机制来实现迭代器模式,这样就可以避免强制转换生成的运行时错误。

在Java现有版本中的java.util.Iterator <E>类和java.util.Collection <E>类,是实现新容器和迭代器很好的例子。当需要具有特定行为的容器时,我们应该考虑扩展java.

collection包中实现的一个类,而不是创建一个新类。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。