完成未来事件/ Java类时动作发生的模式的名称

时间:2012-07-10 19:18:51

标签: java design-patterns asynchronous functional-programming functional-java

我有一个名为Promise的课程如下:

  1. 它具有未来价值
  2. 它始终可以接受后续采取的操作,将未来值用作参数
  3. 当值完成时,功能队列启动
  4. 未来完成后添加的任何功能同步发生
  5. 所以这似乎是一种来自函数式编程的设计模式,我们正在干扰Java。重要的是我们可以在延迟事件上进行菊花链连接,我理解这是一个更加内置于C#3.0语言的功能,但你必须与Java类一起破解。不幸的是,其中一个,我不知道这个比“承诺”或“未来”更好的名称,这似乎有误导性,因为重点更多的是“DelayedCallStack”然后手头的价值,两个,我不知道除了编写我们自己相当复杂的Promise类之外,还有什么方法可以做到这一点理想情况下,我想从功能性Java库中解除这个问题,但到目前为止这个概念还没有。

    注意Java甚至没有为带有参数的异步回调提供语言/库支持,这也是我对能够找到它的过程非常悲观的一个原因。

    那么,这种模式是什么,可以在图书馆中完成吗?

2 个答案:

答案 0 :(得分:3)

看看番石榴的ListenableFuture:

http://code.google.com/p/guava-libraries/wiki/ListenableFutureExplained

ListenableFuture允许您添加在Future计算完成时要执行的回调。您可以控制回调执行的线程池,因此它们可以同步或异步执行。

答案 1 :(得分:2)

我只能说我们在Flex(ActionScript)中实现了几乎完全相同的东西,我们也称它为Promise。在Clojure中,promise更加轻量级:它上面的get操作会阻塞,直到另一个线程deliver为承诺。它基本上是一个单元素队列,除了它永远保留其值,因此后续get总是成功。

你所拥有的是一种承诺,伴随着观察者的价值。我不知道有任何特殊的术语涵盖这种情况。

修改

现在我注意到你的“承诺/未来”可能拥有产生其未来价值的代码(至少它是否存在并不完全明显)。我提到的ActionScript实现没有这样做 - 它的行为类似于Clojure,它的值来自外部。我认为这是未来和承诺之间的关键区别。