【发布时间】:2013-03-12 19:05:07
【问题描述】:
iterator 肯定必须知道它必须迭代的 collection。 collection 是否也必须知道它的 iterator?依赖是一种方式还是两种方式?如果集合了解特定的迭代器实现,则可能不可能对同一个集合有不同的迭代器策略。这是我的想法。我是对的还是我完全错了?
GoF 书中有这个迭代器模式的图表:
我认为这意味着循环依赖。我不确定从List 到LisIterator 和SkipList 到SkipListIterator 的虚线。
P.S:我每天都在处理 Java,但可能更多的是设计问题,而不是特定于特定语言。
【问题讨论】:
-
您是否查看了 Java 集合的源代码以了解他们是如何做到的?这可能会为您的设计问题提供一些见解。
-
在 C++ 中可以使用:std::vector
::iterator 这让我假设 vector 有一个包含迭代器的命名空间。 -
是的,有,没关系。关键是迭代器 interface 从如何迭代集合中抽象出来。迭代器 implementation 处理这个问题。本质上,您可以将迭代器实现视为集合实现的一部分。重要的是接口之间没有这种依赖关系。 (即你不需要关心什么样的集合,即使它是一个集合,一个给定的
Iterator也可以工作。) -
@millimoose 这意味着我不能用另一个迭代器实现替换一个迭代器实现?
-
@Geek 反驳您的示例:如果集合是具有无限数量元素的“惰性”集合怎么办?或者如果它代表从标准输入读取的行?这些都是您必须在更复杂的 API 中处理的所有情况。并且看到您不能保证给定的“迭代策略”适用于任何给定的集合,这会将集合的大量实现细节泄漏到迭代器 API 中。
标签: java language-agnostic iterator design-patterns