阿卡的战略模式

dan*_*nik 6 design-patterns scala akka

这是我之前的问题的延续我如何在Akka接收方法上绕过类型擦除

我有10种类型的事件,它从我需要处理的事件扩展而来.

我想在单独的特征中为每个事件实现业务逻辑,因为混合所有10个事件处理函数将产生数百(如果不是数千)行代码.

我不想为每个事件创建不同的Actor类型.例如:

class Event1Actor extend Actor{
  def receive ={
     case Event1(e) => //event1 Business Logic
   }
}

class Event2Actor extend Actor{
  def receive ={
     case Event2(e) => //event2 Business Logic
   }
}  
Run Code Online (Sandbox Code Playgroud)

和相同的Event3Actor,Event4Actor等....

这样的代码对我来说似乎很难看,因为我需要在每个Actor中实现业务逻辑.

实现10个不同的特征和10个不同的Actor类似乎也是糟糕的设计.

我正在寻找基于设计模式的某种通用解决方案,例如策略模式.

小智 3

case class EventOperation[T <: Event](eventType: T)

class OperationActor extends Actor {

  def receive = {
    case EventOperation(eventType) => eventType.execute
  }

}

trait Event {
 def execute //implement execute in specific event class
}

class Event1 extends Event {/*execute implemented with business logic*/}
class Event2 extends Event {/*execute implemented with business logic*/}
Run Code Online (Sandbox Code Playgroud)

希望这就是您正在寻找的内容并有所帮助,我已经使用此模式来删除将所有操作包装在执行不同类型事件的单个演员下的多余演员。