gpt4 book ai didi

java - Akka actor 实现 : extension or injection?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:00:16 24 4
gpt4 key购买 nike

我是 Akka 的新手(我使用的是 Java lib v2.3.9),我想知道两个相互竞争的参与者实现策略之间的权衡是什么。一方面,我可以用标准方式实现我的 Actor :

// Groovy pseudo-code
class StormTrooper extends UntypedActor {
@Override
void onReceive(Object message) {
if(message instanceof ExecuteOrder66) {
// Betray all Jedi, serve the Emperor!
}
}
}

class DarthVader extends UntypedActor {
@Override
void onReceive(Object message) {
if(message instanceof Feels) {
// Betray the Emperor, save your son!
}
}
}

class Emperor extends UntypedActor {
@Override
void onReceive(Object message) {
if(message instanceof Mace) {
// Transform into your true self!
}
}
}

...我可以通过注入(inject)添加一个抽象层,而不是那样做:

class StarWarsCharacter extends UntypedActor {
@Inject // Injected behavior; implementation doesn't matter
BehaviorHandler behaviorHadler

@Override
void onReceive(Object message) {
behaviorHandler.handle(message)
}
}

interface BehaviorHandler {
void handle(Object message)
}

class StormTrooperBehaviorHandler implements BehaviorHandler {
@Override
void handle(Object message) {
// Betray all Jedi, serve the Emperor!
}
}

class DarthVaderBehaviorHandler implements BehaviorHandler {
@Override
void handle(Object message) {
// Betray the Emperor, save your son!
}
}

class EmperorBehaviorHandler implements BehaviorHandler {
@Override
void handle(Object message) {
// Transform into your true self!!
}
}

只有一种类型的 actor 并使用不同的 BehavioHandler 实现注入(inject)它是否有性能/类加载优势?为什么我不想这样做并使用“标准”actor 实现?

最佳答案

如果您只想使用您的 Actor 作为向处理程序发送消息的方式,那么第二种(非标准)方式就可以了,并且可以在代码结构方面为您带来一些好处- 例如事实上BehaviorHandler是一个单一的方法接口(interface),允许您使用 lambda 来实现它。

但是,Actor只是方法调度器。随着您的系统变得越来越复杂,它们提供了您需要的各种方法。

参见 http://doc.akka.io/docs/akka/2.0/java/untyped-actors.html#untypedactor-api

典型的中型 Akka 系统需要引用 self , sendercontextUntypedActor 上定义.

简而言之:如果您不使用继承,那么您放弃的比您意识到的要多。

关于java - Akka actor 实现 : extension or injection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29760469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com