观察者模式()
一个具体的观察者实现如下当其监听的状态发生改变时update()方法就会被主题回调进而可以在观察者内部进行业务逻辑的处理
public class ConcreteObserver implements IObserver{
public void update(Event evt){
Systemoutprintln(obserer receives information)
}
}
观察者模式是如此常用以致于JDK内部就已经为开发人员准备了一套观察者模式的实现它位于javautil包中包括javautilObservable类和javautilObserver接口它们的关系如图所示
图 JDK内置的观察者模式
注意在JDK中已经实现了一套观察者模式读者可以直接复用相关代码
在javautilObservable类中已经实现了主要的功能如增加观察者删除观察者和通知观察者开发人员可以直接通过继承Observable使用这些功能javautilObserver接口是观察者接口它的update()方法会在javautilObservable的notifyObservers()方法中被回调以获得最新的状态变化通常在观察者模式中Observer接口总是应用程序的核心扩展对象具体的业务逻辑总是会被封装在update()方法中
在JDK中观察者模式也得到了普遍的应用一个最典型的应用便是Swing框架的JButton实现它的事件处理机制如图所示
JButton继承自AbstractButton在AbstractButton中维护了一组监听器它们就扮演着被观察者的角色而AbstractButton本身就是被观察对象监听器ActionListener并不是依靠循环监听去获取按钮何时被单击而是当按钮被单击时通过AbstractButton的fireActionPermed()方法回调ActionListeneractionPerformed()方法实现基于这种结构在应用程序开发时只需要简单地实现ActionListener接口(也就是Observer)并将其添加到按钮(Subject角色)的观察者列表中那么当单击事件发生就可以自动促发监听器的业务处理函数下面从观察者模式的角度分析一段按钮单击处理的代码
[] []