簡體   English   中英

Akka演員實施:延期還是注射?

[英]Akka actor implementation: extension or injection?

我是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!
        }
    }
}

...而不是這樣做,我可以通過注入添加一層抽象:

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實現注入性能/類加載的好處? 是否有一個原因,我不想這樣做,使用“標准”實施的演員?

如果你只想使用你的Actor作為向處理程序發送消息的方式,那么第二種(非標准)方式就可以了,並且可以在代碼結構方面給你一些好處 - 例如, BehaviorHandler是一個單一的方法接口將允許您使用lambda實現它。

然而 ,演員並不是簡單方法調度。 隨着系統復雜性的增加,它們提供了各種方法。

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

典型的中等大小的Akka系統需要引用UntypedActor上定義的selfsendercontext

簡而言之:如果你不使用繼承,那么你放棄的比你意識到的要多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM