Scala中的onMethod()(观察者模式)

时间:2014-02-24 13:03:49

标签: c# scala

一个基本的东西让我不知所措。比方说,我在Scala中有一个对象或类:

object MyClass {
  def start(a: Int) = { ... }
}

调用start方法时,我希望在调用时执行一些操作。我想知道,这是添加onStart函数的Scala方法吗?

object MyClass {
  def start(a: Int) = { 
    //....doing something
    onStart(a)
  }
}

在C#中我使用event。但是在这里我要么完全忘记了要做什么,要么Scala本身没有这样的容量,我能做的就是使用观察者模式。

如何“订阅”onStart(a)(如果必须)?如果没有,我应该使用什么?不过,我可以向start添加一个额外的参数(函数回调)。

1 个答案:

答案 0 :(得分:0)

import scala.collection.mutable.Publisher
import scala.collection.mutable.Subscriber

abstract class Event
case class OnStart(a : Int) extends Event


object MyClass extends Publisher[Event] {
  def start(a: Int) = {
    // do something handy   
    publish(OnStart(a))
  }
}

object Client extends App with Subscriber[Event, Publisher[Event]] {
    MyClass.subscribe(this)   
    MyClass.start(10)

    override def notify(pub: Publisher[Event], event: Event) : Unit = {     
        event match {
          case OnStart(a) => print("OnStart event")
        }
    }   
}