Мне кажется, что встроенная в Java реализация Observer Pattern не подходит для вашего случая.
Фактически, общий шаблон Observer пригоден для использования, когда может возникнуть только один наблюдаемый вид событий. В шаблоне проектирования наблюдателя все наблюдатели получают уведомление всегда .
Итак, в этом случае вам нужно расширить общий шаблон Observer , определив свой собственный интерфейс Observable, например, так:
public enum EventKind {
EVENT_A, EVENT_B, EVENT_C;
}
public interface Observable {
public void registerObserver(EventKind eventKind);
public void unregisterObserver(EventKind eventKind);
public void notifyObservers(EventKind eventKind);
}
Тогда вы можете просто реализовать этот интерфейс Observable с внутренними списками для каждого типа события для уведомления. Вы все еще можете использовать встроенный интерфейс Java Observer, если хотите.
Этот подход имеет следующие преимущества:
- Вы можете гибко добавлять больше видов событий
не влияя на код
Наблюдатели.
- Вы можете зарегистрировать любого наблюдателя на любой
событие.
- Вы обновляете просто Наблюдатели
которые эффективно заинтересованы в
каждое событие.
- Вы избегаете «пустых методов», «проверки типов событий» и других
трюки на стороне наблюдателей.