我在Scala 2.10中使用蛋糕模式根据一些商业逻辑向我的演员注入所需的特征:
我有几种类型f事件:
sealed abstract class Event(val timeStamp:Long)
case class StudentEvent(override val timeStamp:Long, studentId:Long) extends Event(timeStamp:Long)
case class TeacherEvent(override val timeStamp:Long, teacherIdId:Long) extends Event(timeStamp:Long)
Run Code Online (Sandbox Code Playgroud)
现在我有针对每种事件实现操作的特征:
抽象:
trait Action[T <: Event] {
def act[T](event:T):Unit
}
Run Code Online (Sandbox Code Playgroud)
两个推测:
trait StudentAction extends Action[StudentEvent]{
override def act[StudentEvent](event:StudentEvent):Unit = println(event)
}
Run Code Online (Sandbox Code Playgroud)
和
trait TeacherAction extends Action[TeacherEvent]{
override def act[TeacherEvent](event:TeacherEvent):Unit = println(event)
}
Run Code Online (Sandbox Code Playgroud)
现在我的演员:
class ActionActor[T <: Event] extends Actor{
self:Action[T]=>
override def receive= {
case msg: T => act(msg)
case _ => println("Unknown Type")
}
} …Run Code Online (Sandbox Code Playgroud)