Java有两个订阅-分发模式的实现:
-
Java.util.Observer 观察者
观察者相对简洁,只有观察者和被观察者两个角色
我们只要扩展一个Observable抽象类,实现一个Observer接口,就可以使用观察者了,订阅和分发过程如下:
首先,被观察者add观察者
然后,被观察者notifyobservers通知被观察者,用object传参
最后,观察者实现的Observer接口会有一个update回调,在update回调里收到两个对象,一个是被观察者,一个是object传参。 -
Java.util.EventListener 事件监听器
事件监听器比较古老,也比较复杂,需要事件源、事件对象、事件监听器接口、事件监听器实现类。
对比发现,观察者实现起来比较简洁,而且把订阅和分发的工作都放在了Observable里面实现,观察者队列的维护,对观察者的通知等,都已经实现好了,开发者可以直接调用。
另外,被观察者在分发事件时,直接调用Observer接口的update函数。
而事件监听器实现复杂,需要自己维护监听者队列,自己通知监听者等。
另外,事件源在分发事件时,要通过handleEvent传递一个EventObject事件对象(事件对象里还包装了事件源),事件监听器收到这个事件对象,再去处理。