[笔记]Observer和EventListener

Java有两个订阅-分发模式的实现:

  1. Java.util.Observer 观察者
    观察者相对简洁,只有观察者和被观察者两个角色


    [笔记]Observer和EventListener_第1张图片
    观察者

    我们只要扩展一个Observable抽象类,实现一个Observer接口,就可以使用观察者了,订阅和分发过程如下:
    首先,被观察者add观察者
    然后,被观察者notifyobservers通知被观察者,用object传参
    最后,观察者实现的Observer接口会有一个update回调,在update回调里收到两个对象,一个是被观察者,一个是object传参。

  2. Java.util.EventListener 事件监听器
    事件监听器比较古老,也比较复杂,需要事件源、事件对象、事件监听器接口、事件监听器实现类。


    [笔记]Observer和EventListener_第2张图片
    事件监听器

对比发现,观察者实现起来比较简洁,而且把订阅和分发的工作都放在了Observable里面实现,观察者队列的维护,对观察者的通知等,都已经实现好了,开发者可以直接调用。
另外,被观察者在分发事件时,直接调用Observer接口的update函数。

而事件监听器实现复杂,需要自己维护监听者队列,自己通知监听者等。
另外,事件源在分发事件时,要通过handleEvent传递一个EventObject事件对象(事件对象里还包装了事件源),事件监听器收到这个事件对象,再去处理。

引用

java设计模式--观察者模式和事件监听器模式

你可能感兴趣的:([笔记]Observer和EventListener)