在未来事件/Java类完成时执行操作的模式的名称



我目前有一个名为Promise的类,其工作原理如下:

  1. 它具有未来价值
  2. 它总是可以接受使用未来值作为参数的后续操作
  3. 值完成后,函数队列启动
  4. 未来完成后添加的任何功能都会同步发生

因此,这似乎是我们在Java中嵌入的函数式编程的设计模式。重要的是,我们可以对延迟事件进行菊花链处理,据我所知,这是一个更内置于C#3.0语言中的功能,但您必须与Java类一起破解。不幸的是,第一,我不知道有什么比"promise"或"future"更好的名字了,这似乎有误导性,因为重点更多地放在"DelayedCallStack"上,而不是手头的价值;第二,除了编写我们自己相当复杂的promise类之外,我不认为有什么方法可以做到这一点。理想情况下,我想把它从功能Java库中提取出来,但到目前为止,我还没有想到这个概念。

注意,Java甚至没有为接受参数的异步回调提供语言/库支持,这也是我对能否找到参数感到悲观的原因之一。

那么,这种模式是什么,它能在图书馆中实现吗?

看看Guava的ListableFuture:

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

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

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

你所拥有的是一种承诺,再加上对其价值的观察。据我所知,没有任何专门的术语能完全涵盖这种情况。

编辑

现在我注意到,您的"promise/future"可能拥有产生其未来价值的代码(至少它是否拥有还不完全清楚)。我提到的ActionScript实现并没有做到这一点——它的行为就像Clojure的,值是从外部提供的。我认为这是未来和承诺之间的关键区别。

最新更新