连续对象值提取器的设计模式
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
考虑一个对象,该对象在 "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