0

考虑一个在“拉”的基础上从源中提取对象值的对象,直到null遇到一个特殊值(例如, )。

Java中,API 可能类似于

  public interface ValueExtractor<T> {
    public T extractNext();
  }

从操作上讲,这是一个,Iterator但它只有一个(某种)“next()”方法,而不是一个Reader,因为它不会逐字节地从源中读取。它也类似于数据库游标,因为它“滚动”所有数据值(记录),直到它们用尽。

这个用例除了“迭代器”之外还有其他设计模式吗?

调用这样一个简单对象的最佳名称是什么?

4

2 回答 2

2

这是一个Iterator. 仅仅因为它不遵循java.util.Iterator接口并不意味着它不遵循迭代器设计模式。

唯一的区别是您只有一个方法,它结合了获取下一个元素和检查是否有下一个要获取的对象。null如果没有更多元素,我假设您会返回。

无论您有单独的hasNext()andfetchNext()方法,还是将它们组合成一个返回 null 的方法,这是一个 API 决定,并且不会改变您遵循迭代器设计模式的事实。

但是,从 API 命名约定的角度来看,如果您选择将所有 Iterator 方法组合成一个fetchNext()方法,那么您的类名中不应包含“Iterator”一词,因为这可能会导致您的代码用户混淆你的类实现了java.util.Iterator接口。

否则你命名你的类并不重要,所以我会根据它迭代的任何数据来命名它。

编辑 既然你在你的OP中说:

它也类似于数据库游标,因为它“滚动”所有数据值(记录),直到它们用尽。

您可能可以将其命名为ScrollableRecords

于 2015-03-09T00:50:48.220 回答
1

Guava 有一个AbstractIterator类,你可以使用它来让你的 ValueExtractor 表现得像一个迭代器。

于 2015-03-08T21:38:59.957 回答