Scala Listener/Observer

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)

如果您想服用红色药丸,请阅读这篇与此相关的文章.:)

  • 你可以很好地将它提取到一个`Publisher`特征中. (5认同)

Ale*_*nov 17

是否有更像Scala的方式来做到这一点?

是.阅读文章Ingo Maier,Tiark Rompf和Martin Odersky 弃用观察者模式.

更新27-Apt-2015: Maier和Odersky 还有一个更新的使用Scala.React的Observer模式.