《Java设计模式及实践》—3.4 迭代器模式
3.4 迭代器模式
迭代器模式可能是Java中最广为人知的模式之一。Java程序员在使用集合(collection)
时,并不需要关注其类型是数组、列表、集合(set)还是其他,有些人并不知道这些集合包其实是使用了迭代器模式来实现的。
我们可以以相同的方式处理集合,无论它是列表还是数组,这是因为它提供了一种迭代其元素而不暴露其内部结构的机制。更重要的是,不同类型的集合能够使用相同的统一的机制。这种机制被称为迭代器模式。
1.目的
迭代器模式提供了一种顺序遍历聚合对象元素而不暴露其内部实现的方法。
2.实现
迭代器模式基于两个抽象类或接口,可以通过成对的具体类来实现。类图如图3-5所示。
图 3-5
迭代器模式使用了以下类:
Aggregate(抽象容器):应该由所有类实现的抽象类,并且可以由迭代器遍历。这对应于java.util.Collection接口。
Iterator(抽象迭代器):抽象迭代器是迭代器抽象类,它定义遍历容器对象的操作以及返回对象的操作。
ConcreteAggregate(具体容器):具体容器可以实现内部不同的结构,但会暴露处理遍历容器的具体迭代器。
ConcreteIterator(具体迭代器):这是处理特定具体容器类的具体迭代器。实际上,对于每个具体容器,必须实现一个具体迭代器。
每一个Java程序员在日常工作中都会使用迭代器。让我们看看如何实现迭代器。首先,定义一个简单的迭代器接口:
然后实现一个简单的容器,它维护一个String类型数组:
我们在容器中嵌套了迭代器类。这是最好的选择,因为迭代器需要访问容器的内部变量。我们可以在这里看到它的外观:
3.适用情况和示例
如今,迭代器在大多数编程语言中都很流行,它可能是Java中使用最广泛的集合包。当使用以下循环结构遍历集合时,它也在语言级别实现:
可以使用泛型机制来实现迭代器模式,这样就可以避免强制转换生成的运行时错误。
在Java现有版本中的java.util.Iterator <E>类和java.util.Collection <E>类,是实现新容器和迭代器很好的例子。当需要具有特定行为的容器时,我们应该考虑扩展java.
collection包中实现的一个类,而不是创建一个新类。
- 点赞
- 收藏
- 关注作者
评论(0)