通常,我们使用观察者模式实现事件监听时,都需要在被监听对象中调用监听者的方法,伪代码描述如下:
List<T> listenerList; // 监听者列表
for(Listener listener:listernerList) {
listener.do();
}
如果仅仅是这样调用,会存在一个问题:
若在调用监听者方法时出现运行时异常,则可能导致后续监听者无法得到调用通知。
因此,在调用监听者方法时,应该在try...catch块中进行,这样不论监听者方法是否抛出异常,都不受影响。
伪代码描述如下:
List<T> listenerList; // 监听者列表
for(Listener listener:listernerList) {
try {
listener.do();
}catch(Throwable t) {}
}
细节就是魔鬼。。。