用途
这个模式用的场合还是很多,如消息、状态通知,当事件A发生时,它就通知某个观察者(监听者),观察者接到消息后,再做后续处理。
优点
我们可以用另外一个方法实现上面的功能,让观察者实时查询事件A是否发生,如果发生了就处理,如果没有发生就接着查询。这样首先就是资源占用会比较多;第二安全性都不好,因为如果有两个观察者同时观察一个事件A,那么这首先就有两个线程同时调用事件A的一个接口,这就牵扯线程安全问题;第三是事件A和观察者之间过于耦合,如果有多个事件和多个观察者,结构显得很臃肿。
所以上面的缺点正好对应的是利用回调的观察者模式的优点。
UML类图
1. 事件A、B和观察者A、B、C之间是通过一个接口通信的;
2. 一个事件可以有多个观察者,一个观察者也可以监听多个事件;