Настольное приложение
Многое, что относится и к библиотекам, также применимо и здесь, поэтому посмотрите на раздел ниже.Если ничего другого, вы можете обернуть часть своего кода, которая использует Akka как отдельную библиотеку.Одно предостережение в том, что если вы используете Swing, вы, вероятно, захотите использовать SwingUtilities.invokeLater
, чтобы вернуться к потоку диспетчеризации событий до взаимодействия с графическим интерфейсом.(Кроме того, не блокируйте этот поток. Возможно, вы захотите использовать фьючерсы, чтобы избежать этого, поэтому подумайте о том, чтобы спроектировать вашу библиотеку так, чтобы она возвращала фьючерсы.)
Библиотека
В вашем примере предполагается, чтообертка вокруг ваших актеров или, по крайней мере, дизайн снизу вверх, где ваш интерфейс определяется деталями вашей реализации.Вместо этого спроектируйте библиотеку более нисходящим способом, сначала выяснив интерфейс библиотеки, а затем (возможно) используя Akka в качестве детали реализации.(Это хорошая идея для проектирования библиотеки в целом.) Если вы уже написали что-то с использованием Akka, не беспокойтесь, просто спроектируйте интерфейс отдельно от реализации и сшейте их вместе.Если вы сделаете это, вам не понадобится конкретный шаблон, поскольку применяется обычный шаблон дизайна интерфейса, независимо от того, используете ли вы Akka.
В качестве примера рассмотрим компилятор.Подпись метода компиляции может быть простой:
def compile(sources: List[File]): List[File] // Returns a list of binaries
Никаких упоминаний об актерах здесь.Но это может сделать:
compileActor ? Compile(sources)
... и заблокировать результат.Актер основного компилятора может зависеть от других акторов, но нет причин показывать их через публичный API.