接口设计:采用单个输入并返回多个输出的方法

时间:2012-05-30 02:38:32

标签: java

我想收集有关哪个更好,更好或更差的反馈......

Function<I, O> {
  List<O> take( I );
}

Receiver<T> {
  void take( T );
}

Processor<I, O> {
   void processor( I, Receiver<O>> );
}

我知道简单的答案是功能,但处理器确实有一些好处。

  • 添加了作为内容过滤的Receiver传入的功能。

1 个答案:

答案 0 :(得分:1)

没有明显优选的替代方案。这取决于用例。

正如你所指出的,与前者相关的主要原因是简单性。客户端不必实现任何操作即可使用您的界面。对于服务API,函数并不总是最佳选择,因为您可能不知道先验您将要回馈多少个。

使用后者的主要原因是可扩展性。例如,您可能会生成数百万个O对象,在返回任何内容之前尝试将它们全部填充到内存中会有自杀倾向。但是,像Processor这样的回调模式很难用到服务API。

服务API的最佳选择是混合:

Function<I, O> {
  List<O> take( I, OToken );
}

其中返回O的“页面”,从表示返回的最后一页结尾的OToken开始。顺便说一下,如果你愿意只返回Iterator<O>而不是List<O>,你可以在客户端放置另一个层来抽取OToken的东西。