Я ищу методы инкапсуляции, такие как private
для членов класса. Я хотел бы, чтобы актер предоставил возможность принимать некоторые распространенные безопасные сообщения и привилегии, которые могут изменить состояние нежелательным образом. Я также могу создать прокси-актор, который будет фильтровать сообщения на основе политики доступа. Но оба актера по-прежнему будут доступны через полный путь актора ref. Как я могу сделать некоторую ссылку на актера частной, доступ к которой может получить только ее родитель?
Как ограничить доступ локальному актеру
Ответы (1)
К любому актору может обращаться любой другой актор, если путь известен с помощью ActorSelection
.
Если вы хотите ограничить определенные сообщения, вы можете сделать это с помощью таких вещей, как package-private.
Допустим, у вас есть DangerousActor
, и вы хотите, чтобы субъекты, определенные в том же пакете, могли отправлять DangerousMessage
, но у вас также есть SafeMessage
, и вас устраивает, что кто-либо еще в системе акторов отправляет это.
package dangerous
object DangerousActor {
private[dangerous] case object DangerousMessage
case object SafeMessage
}
case DangerousActor extends Actor {
import DangerousActor._
def receive = {
case DangerousMessage =>
case SafeMessage =>
}
}
Только субъекты, также определенные в пакете dangerous
, смогут ссылаться на DangerousMessage
.
person
Ryan
schedule
20.08.2015