我想收集有关哪个更好,更好或更差的反馈......
Function<I, O> {
List<O> take( I );
}
或
Receiver<T> {
void take( T );
}
Processor<I, O> {
void processor( I, Receiver<O>> );
}
我知道简单的答案是功能,但处理器确实有一些好处。
答案 0 :(得分:1)
没有明显优选的替代方案。这取决于用例。
正如你所指出的,与前者相关的主要原因是简单性。客户端不必实现任何操作即可使用您的界面。对于服务API,函数并不总是最佳选择,因为您可能不知道先验您将要回馈多少个。
使用后者的主要原因是可扩展性。例如,您可能会生成数百万个O对象,在返回任何内容之前尝试将它们全部填充到内存中会有自杀倾向。但是,像Processor这样的回调模式很难用到服务API。
服务API的最佳选择是混合:
Function<I, O> {
List<O> take( I, OToken );
}
其中返回O的“页面”,从表示返回的最后一页结尾的OToken开始。顺便说一下,如果你愿意只返回Iterator<O>
而不是List<O>
,你可以在客户端放置另一个层来抽取OToken的东西。