Добрый день! Я пишу небольшой фреймворк на Java, основанный на акторной модели и обеспечивающий простое взаимодействие потоков.
У меня возникла необычная проблема! Мне нужно чтобы некоторый метод объекта мог быть вызван только из его объекта-контейнера.
Суть вот в чем: у меня есть объект Event (событие). На событие, с помощью метода subscribe() могут подписываться другие персонажи (потоки), когда событие возникает, все эти персонажи получают об этом уведомление. Т.е. метод subscribe() должен быть открыт для всех персонажей программы (для всех потоков). С этим проблем нет — это решает модификатор public.
В свою очередь, метод Event.addReaction() добавляет к событию реакцию, которая должна быть незамедлительно выполнена персонажем-владельцем события. Доступ к этому методу должен иметь
только владелец события, т.к. нельзя чтобы персонажи реагировали на чужие события никак иначе кроме после получения сообщения.
Вот кусок утрированного кода:
class Person
{
Event mItDone = new Event();
public Person()
{
mItDone.subscribe(AnotherPerson); //AnotherPerson получит сообщение при наступлении события
mItDone.addReaction(new myReaction()); //myReaction будет выполнено сразу при наступлении события
}
private void eventOccurs()
{
mItDone.fire(); //Запускает событие (fire не должен быть доступен ни для кого кроме этого экземпляра Person
}
class myReaction extends Reaction
{
react()
{
//Реакция этого персонажа на событие mIdDone;
}
}
}
Вот и получается, что мне для правильного функционирования объекта класса Event нужно чтобы методы addReaction() и fire() были доступны только для того объекта, в котором он содержится. Помог бы какой-нибудь специальный модификатор доступа, но таких нет(
Есть мысли?