Jeb*_*Jeb 15 scala listener observer-pattern
通常,在Java中,当我有一个向其他对象提供某种通知的对象时,我将使用Listener/Observer模式.
是否有更像Scala的方式来做到这一点?我应该在Scala中使用这种模式,还是我应该利用的语言中还有其他东西?
Ale*_*ise 20
你仍然可以累积一个回调列表,但你可以让它们成为函数,而不必再提出另一个单一的方法接口.
例如
case class MyEvent(...)
object Foo {
var listeners: List[MyEvent => ()] = Nil
def listen(listener: MyEvent => ()) {
listeners ::= listener
}
def notify(ev: MyEvent) = for (l <- listeners) l(ev)
}
Run Code Online (Sandbox Code Playgroud)
如果您想服用红色药丸,请阅读这篇与此相关的文章.:)
Ale*_*nov 17
是否有更像Scala的方式来做到这一点?
是.阅读文章Ingo Maier,Tiark Rompf和Martin Odersky 弃用观察者模式.
更新27-Apt-2015: Maier和Odersky 还有一个更新的使用Scala.React的Observer模式.