Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Как ограничить вызов способа обладателем объекта?

Anna | 4.06.2014 | нет комментариев
Добрый день! Я пишу маленький фреймворк на 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() были доступны только для того объекта, в котором он содержится. Помог бы какой-нибудь особый модификатор доступа, но таких нет(

Есть мысли?

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB