首先观察者模式的简单类图如下:
其实实现很简单,就是在被观察者中声明一个观察者的队列(数组),当被观察者有相应的行为后,通知整个队列上的观察者(所以是1对多的对应关系)
在tomcat中:
上面的结构图中,LifecycleListener 代表的是抽象观察者,它定义一个 lifecycleEvent
方法,这个方法就是当主题变化时要执行的方法。 ServerLifecycleListener 代表的是具体的观察者,它实现了
LifecycleListener 接口的方法,就是这个具体的观察者具体的实现方式。Lifecycle
接口代表的是抽象主题,它定义了管理观察者的方法和它要所做的其它方法。而 StandardServer
代表的是具体主题,它实现了抽象主题的所有方法。这里 Tomcat
对观察者做了扩展,增加了另外两个类:LifecycleSupport、LifecycleEvent,它们作为辅助类扩展了观察者的功能。LifecycleEvent
使得可以定义事件类别,不同的事件可区别处理,更加灵活。LifecycleSupport
类代理了主题对多观察者的管理,将这个管理抽出来统一实现,以后如果修改只要修改 LifecycleSupport
类就可以了,不需要去修改所有具体主题,因为所有具体主题的对观察者的操作都被代理给 LifecycleSupport
类了。这可以认为是观察者模式的改进版。
针对这句话的理解:LifecycleSupport
类代理了主题对多观察者的管理,将这个管理抽出来统一实现,以后如果修改只要修改 LifecycleSupport
类就可以了,不需要去修改所有具体主题,因为所有具体主题的对观察者的操作都被代理给 LifecycleSupport
类了。这可以认为是观察者模式的改进版。
参考:
https://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/
阅读(893) | 评论(0) | 转发(0) |