事件监听器其实是观察者模式的一种实现
Subject为抽象主题接口,定义了主题类中对观察者列表的一系列操作, 包括增
Concretes Subject为具体主题类,实现抽象主题接口,在这个类中我们需要先定义一个Observers列表,并对接口中的方法进行重写,在实现notifaObservers方法时,通过迭代的方式调用list中每一个observer的update方法。这里注意notifyObservers中的同步块。在多线程的情况下, 为了避免主题类发布通知时, 其他线程对观察者列表的增删操作, 同步块中用一个临时List来获取当前的观察者列表。
Observer为抽象观察者接口,定义了观察者对主题类更新状态接受操作
ConcreteObserver为具体观察者类,实现观察者接口更新主题类通知等逻辑
事件监听器的逻辑结构如图所示
观察者(Observer)相当于事件监听者,被观察者(Observable)或者说主题(Subject)相当于事件源和事件,执行逻辑时通知observer即可触发oberver的update,同时可传被观察者和参数。
EventListener为事件监听器的父类接口
IntentListener接口继承了EventListener接口,并制定监听的对象为IntentEvent
IntentManager继承了父类AbstractListenerManager,AbstractListenerManager相当于事件源,在这里实现了注册listener,移除listener和post方法。在这里,nofity方法相当于post,当出现intent event,intentManager负责调用通知eventDispatcher,再由eventDispatcher负责具体事件的分发。
eventDispatcher接口定义了post方法,eventdeliveryService继承了eventdispatcher接口并定义了一个新方法来控制event sink处理event的时间。
coreEventDispatcher类继承了defaultEventSinkRegistry并实现了eventDeverliveryService接口,负责具体事件分发处理。