23.2. 事件的特性分析

如果我们把事件模型分为两部分,演讲者(即事件起源)与听众(即Listener);那么,从程序的思维来看:事件模型的显著特点是:一个演讲者可能会有多个听众,而听众可以任意的增加或删除。因此,事件经常用来进行解耦。譬如说某一个业务数据发生变化,这种变化可能会影响到界面或者其它数据的变化,但事先,我们并不知道会产生多少变化,于是我们就把“业务数据发生变化”打包成一个事件,谁对此事件感兴趣,谁就注册并侦听此事件。

但同时,我们发觉,针对常规的事件实现方式,如果你要增加一个Listener,首先必须要获得“事件发生处”的句柄,然后再通过此名柄显示的增加Listener,写成伪码就是:speaker.addListener(myListener)。无疑,这种实现方式存在一个明显的弊端,那就是必须要事先获得“事件发生地”的句柄,这就意味着如果你要扩展程序功能,那么,你需要对旧有代码进行更改,而且,这种更改的成本还比较大。有没有更好的实现机制呢?