【发布时间】:2020-07-12 13:40:09
【问题描述】:
我写了一个迭代器,它返回另一个给定无向简单图的固定大小的子图。 它维护一个内部图,该图是当前计算的子图,并具有用于计算下一个子图的私有堆栈和列表。
无法知道迭代器是否可以返回另一个元素,因为算法可能会在尝试查找下一个子图时终止。
在这个设计中,Java 提供的next() 和hasNext() 模式不起作用。我目前使用以下抽象方法编写了自己的接口 BlindIterator:
/**
* @return True iff the current element is a valid return.
*/
public boolean hasCurrent();
/**
* @return Returns the current element, but does NOT generate the next element. This method can be called
* as often as wanted, without any side-effects.
*/
public T getCurrent();
/**Generates the next element, which can then be retrieved with getCurrent(). This method thus only provides
* this side-effect. If it is called while the current element is invalid, it may produce and exception,
* depending on the implementation on the iterator.
*/
public void generateNext();
这是一种常见的模式吗?有比我更好的设计吗?
【问题讨论】:
-
那么如果#getCurrent 返回当前节点,你将如何进入下一个节点。我认为迭代器在这里可以正常工作,您可以使用 #hasNext 来确定是否存在下一个有效节点,您当前的节点将 always 有效,而 #next 将是一个阻塞/昂贵的调用。然后,您可以围绕#next 优化您的代码,并避免使用#hasNext 生成昂贵的代码
-
如何安全地开始迭代并获取第一个元素?如果在当前元素无效时调用 generateNext",可能会产生异常"
标签: java oop design-patterns iterator software-design