Диспетчер событий на Java - PullRequest
1 голос
/ 20 ноября 2011

Мне нужно сделать для школы простой «симулятор стратегии».Для этого мне нужно создать диспетчер событий (цикл обработки событий), который будет отправлять событие зарегистрированным сторонам.Например, у меня есть ресурсы на карте.Одно событие - «ресурс в местоположении 1 истощен».И один «игрок» заинтересован в этом событии.Как бы мне создать диспетчер (и зарегистрировать одного игрока на одно конкретное событие).Кроме того, как диспетчер проверяет событие?Делает ли это просто что-то вроде if(resourceLocation1.getNoResource()==0) trigerEvent(); или есть какой-то другой, более элегантный способ.

Я работал со слушателями событий (в основном в ActionScrip3), но никогда не создавал пользовательское событие и пользовательский диспетчер событий.Любая помощь приветствуется, включая некоторые ссылки на некоторые учебные пособия или примеры кодов.

Если мне не ясно, что я ищу, пожалуйста, дайте мне знать, и я постараюсь объяснить это лучше

Спасибо.

Ответы [ 3 ]

1 голос
/ 20 ноября 2011

А как насчет реализации шаблона наблюдателя ?

Например, у вас может быть ResourceObserver, который регистрирует определенный Resource как наблюдаемое. Оттуда вы можете зарегистрировать Player объектов в качестве наблюдателей на вашем ResourceObserver. Объект карты будет содержать все ресурсы. В вашем цикле событий у вас будет что-то вроде:

...
Map.updateResources();
...

Так, например, когда вы звоните updateResources, все ресурсы карты будут проверять, не исчерпаны ли они. Если ресурс был заблокирован, он уведомит о своем ResourceObserver, который, в свою очередь, уведомит всех зарегистрированных игроков об этом ресурсе.

1 голос
/ 20 ноября 2011

Ваш EventDispatcher не должен проверять все возможные условия и уведомлять всех возможных слушателей.Просто оповестите слушателей, зарегистрированных на определенный тип события.

Зарегистрируйте Player чтобы получать уведомления в зависимости от игрового события

eventDispatcher.register(player, Events.RESOURCE_DEPLETION_EVENT);

Тогда ваш Resource будет предоставлять событие, когда ресурсы достигнут 0

class Resource {
    public void deplete(int amount) {
         this.amount -= amount;
         if (this.amount <= 0)
             eventDispatcher.notify(this, Events.RESOURCE_DEPLETION_EVENT);
    }
 }

В противном случае вы получите большой цикл событий, содержащий логику, который снижает производительность и затрудняет отладку.

1 голос
/ 20 ноября 2011

Java имеет встроенный потокобезопасный шаблон Observer , который вы можете использовать.

Чтобы написать свой собственный, вы должны Player реализовать интерфейс ResourceDepeletionListener и добавить его вмассив слушателей в вашем Resource классе.Когда ресурсы достигают нуля, они вызывают resourcesDepleted() для всех ResourceDepeletionListener объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...