观察者模式学习笔记

观察者模式

定义:对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

在目标对象中会有观察者集合,当目标对象有变化时将会通知所有观察者集合对象做相关更新操作。

 

java中的观察者模式

目标对象

需要继承java.util.Observable类,需要调用this.setChanged()方法进行状态changed设置为TRUE

//主动通知,推方式

this.notifyObservers(this.content)

//拉方式

this.notifyObservers();

 

观察者

实现java.util.Observer接口并实现update方法,对于推和拉方式都支持

 

Swing中的观察者:事件处理,swing组件式被观察的目标,而每个实现监听器的类就是观察者,监听器的接口就是观察者的接口,在调用addXXXListener方法的是有就相当于注册观察者

 

例子:水质监测系统中当水质水平为正常时是通知监测人员;当为轻度污染时,还要通知预警人员和检测人员;当为中度或者重度时需要通知监测人员、预警人员、检测部门领导

思路:水质记录为目标,检测人员、预警人员、检测部门领导为观察者

在水质记录目标中对水质等级进行set值的时候调用notifyWatchers方法进行通知,在通知方法中通过当前水质等级判断通知那些观察者。

示例代码:

if(this.polluteLevel >= 0) {

    //通知监测人员

    if("监测人员“.equals(watcher.getJob())){

      watcher.update(this);

    }

}

 

if(this.polluteLevel >= 1) {

    //通知预警人员

    if("预警人员“.equals(watcher.getJob())){

      watcher.update(this);

    }

}

if(this.polluteLevel >= 2) {

    //通知监测部门领导

    if("监测部门领导“.equals(watcher.getJob())){

      watcher.update(this);

    }

}
这样就可以满足0:监测人员;1:监测人员、预警人员;2:监测人员、预警人员、监测部门领导;
与中介者模式结合:下拉级联菜单可以将所有下拉列表中的动作封装到一起
 
;