Bin*_*obe 5 java generics design-patterns observer-pattern
我想听听你对应用观察者模式的看法.
我的目标是实现一个可以监听多个可观察对象的具体观察者类.
如果我像下面那样开发每个不同的观察者,那么下面就会很简单.
public class ConcreteObserver implements EventObserverA , EventObserverB {
updateEventA(EventA event) {}
updateEvetnB(EventB event) {}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我应该编写许多不同的观察者/可观察的类/接口,里面几乎相同的代码片段.
为了避免像上面这样的麻烦,我想要对观察者进行生成/但是你们知道多重继承规则不允许像下面这样的代码.
public class ConcreteObserver implements Observer<EventA> , Observer<EventB> {
update(EventA event) {}
update(EventB event) {}
Run Code Online (Sandbox Code Playgroud)
}
因为我在一个具体的观察者中至少有两位数的Observable事件,所以我希望尽可能避免单独实现每个观察者/可观察对.
我可能会猜测这种情况可能比观察者模式有更好的模式,因为观察者模式是为n:1观察者设计的:可观察的,而我的情况需要1:n观察者:观察者.
你们对这个案子有什么想法/建议吗?
有了Java 8的神奇之处,你ConcreteObserver不一定要实际实现Observer<EventA>和Observer<EventB>; 如果你写这样的东西:
public class ConcreteObserver {
observeEventA(EventA event) {}
observeEventB(EventB event) {}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用::updateEventA或::updateEventB在ConcreteObserver实例上获取可自动转换为Observer<EventA>或Observer<EventB>功能接口的方法.例如,您可以编写以下任何内容:
Observer<EventA> eventAObserver = concreteObserver::updateEventA;Observer<EventB> eventAObserver = new ConcreteObserver()::updateEventB;observerRegistry.register(EventA.class, concreteObserver::updateEventA);