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

时间:2015-03-08 21:01:56

标签: java design-patterns iterator extractor reader

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

Java中,API可能类似于

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

在操作上,这是一个Iterator,但它只有一个(有点)&#34; next()&#34;方法并且不是Reader,因为它不是逐字节地从源读取的。它也类似于数据库光标,因为它可以滚动&#34;滚动&#34;覆盖所有数据值(记录),直到它们用完为止。

是否存在除&#34;迭代器&#34;以外的设计模式?对于这个用例?

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

2 个答案:

答案 0 :(得分:2)

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

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

是否有单独的hasNext()fetchNext()方法,或者如果将它们组合到一个返回null的方法中,则是API决策,并不会改变您遵循迭代器设计模式的事实。

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

你的名字命名并不重要,所以我会根据它迭代的数据来命名它。

修改 既然你在OP中说:

  

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

您可以将其命名为ScrollableRecords

答案 1 :(得分:1)

Guava有一个AbstractIterator类,您可以使用它来使ValueExtractor像迭代器一样运行。