我在 Java EE 中使用观察者模型,其想法是让一个服务向多个观察者触发事件。然而,虽然所有的观察者都在监听同一个事件,但他们每个人都只对特定的事件类型感兴趣,该类型是在事件内部指定的。我当前的代码是这样的:
public class Service {
public void fireEvent(EventType type) {
MyEvent event = new MyEvent(type);
fire(event);
}
}
public class TypeAObserver {
public void observeEvent(@Observes MyEvent event) {
if (EventType.TYPE_A.equals(event.getType()) {
// do something
}
}
}
public class TypeBObserver {
public void observeEvent(@Observes MyEvent event) {
if (EventType.TYPE_B.equals(event.getType()) {
// do something
}
}
}
如您所见,所有观察者都必须在进行进一步操作之前检查类型,这增加了源代码内部的重复。此外,由于所有观察者都会收到相同的事件,而实际上只有少数观察者会处理它,恐怕这会引入不必要的性能开销。
因此,我正在寻找其他方法,最好不使用除 Java EE 之外的任何新库,以使每个观察者仅侦听特定类型的事件。