Ответ 1
Обычно шаблон наблюдателя реализуется специальным решением, когда это необходимо. Когда дело доходит до поведенческих моделей, это один из самых простых: два метода для управления списком "наблюдателей" и один метод, который уведомляет наблюдателей, когда происходит что-то интересное.
Шаблон наблюдателя имеет тенденцию возникать слишком редко за пределами определенных доменов, и когда он возникает, он имеет тенденцию быть слишком специфичным для области приложения, поэтому общие решения не имеют большого значения. Вы можете увидеть проблему с классом java.util.Observable
: если вы наследуете от Observable
, вы должны принять всевозможные "наблюдатели", которые могут быть переданы вам, что, вероятно, не имеет смысла для вашего приложения:
- Что делать, если ваш объект может создавать два разных типа событий и, следовательно, нуждается в двух разных списках наблюдателей?
- Что делать, если наблюдатели могут влиять на ваш объект в зависимости от события, например. путем наложения вето на изменение?
Тем не менее, EventBus из Google Guava, похоже, делает довольно хорошую работу по упрощению создания и обработки событий, применяя радикально иной подход.
Другие методы основанные на аннотациях, обсуждались ранее в SO.