连续对象值提取器的设计模式

Design pattern for consecutive object value extractor

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

Java 中,API 可能类似于

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

在操作上,这是一个 Iterator,但它只有(某种)"next()" 方法,而不是 Reader,因为它不是逐字节读取源-字节。它也类似于数据库游标,因为它 "scrolls" 在所有数据值(记录)上,直到它们耗尽。

这个用例是否有除 "iterator" 之外的设计模式?

给这样一个简单的对象起什么名字最好?

Guava 有一个 AbstractIterator class 可以让你的 ValueExtractor 表现得像一个 Iterator。

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

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

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

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

你给你的 class 取什么名字并不重要,否则我会根据它迭代的任何数据来命名它。

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

It also resembles a database cursor in the sense that it "scrolls" over all data values (records), until they are exhausted.

您可以将其命名为 ScrollableRecords