Предположим, у меня есть вещатель класса для трансляции определенных событий. Например:Шаблон наблюдателя с фильтром, на каком уровне фильтровать?
List<Observers> observers = …
Public void broadcast(Event e) {
for (each observer: observers) {
observer.observe(e);
}
}
Тогда у меня есть класс, называемый EventReceiver, который делает следующее
public void processEvent(Event e) {
saveToDatabase(e);
broadcast(e);
}
Сейчас: новое требование приходит, говоря, что, когда событие имеет тип «Foo», мы должны сохранить он в базу данных, но не транслирует его.
На каком слое следует фильтровать? В broadcast.java или в EventReceiver.java?
Например:
Public void broadcast(Event e) {
If (event != foo) {
for (each observer: observers) {
observer.observe(e);
}
}
}
Или
public void processEvent(Event e) {
saveToDatabase(e);
If (event != foo) {
broadcast(e);
}
}
Можете ли вы подробнее рассказать об этом? – JavaDeveloper