观察者模式
定义:对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
在目标对象中会有观察者集合,当目标对象有变化时将会通知所有观察者集合对象做相关更新操作。
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);
}
}