0

我想收集关于哪个更好或更坏的反馈......

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

或者

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

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

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

  • 添加了传递作为内容过滤的接收器的能力。
4

1 回答 1

1

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

正如您所指出的,选择前者的主要原因是简单。客户不必为了使用您的界面而实现任何东西。对于服务 API,Function 并不总是最佳选择,因为您可能事先不知道要回馈多少个 Os。

选择后者的主要原因是可扩展性。例如,您可能正在生成数百万个 O 对象,并且在返回任何内容之前尝试将它们全部填充到内存中是自杀的。然而,像处理器这样的回调模式很难硬塞到服务 API 中。

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

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

在其中您返回 O 的“页面”,从 OToken 开始,该 OToken 表示返回的最后一页的结尾。顺便说一句,如果您愿意返回Iterator<O>而不是List<O>.

于 2012-05-30T03:15:48.790 回答