考虑一个从" pull"中提取对象值的对象。基础,直到遇到特殊值(例如null
)。
在Java
中,API可能类似于
public interface ValueExtractor<T> {
public T extractNext();
}
在操作上,这是一个Iterator
,但它只有一个(有点)&#34; next()&#34;方法并且不是Reader
,因为它不是逐字节地从源读取的。它也类似于数据库光标,因为它可以滚动&#34;滚动&#34;覆盖所有数据值(记录),直到它们用完为止。
是否存在除&#34;迭代器&#34;以外的设计模式?对于这个用例?
调用这样一个简单对象的最佳名称是什么?
答案 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像迭代器一样运行。