java模式之观察者模式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java模式之观察者模式
observer模式,当被观察者发⽣变化时,通知观察者,然后观察者也跟着变化
实例:热⽔器,显⽰器,报警器
热⽔器相对于显⽰器就是被观察者,显⽰器相对于热⽔器就是观察者,但是相对于报警器就是被观察者,报警器相对于显⽰器就是观察者java中被观察者继承Observable类,观察者继承Observer类
1:热⽔器实现类
package pattern.observer;
import java.util.Observable;
/**
* 热⽔器:被观察者,
* 显⽰器:相对热⽔器是观察着,相对于报警器是被观察者,
* 报警器:观察者
* @author lifeng
*
*/
public class Heater extends Observable {
private int temperature;
public int getTemperature() {
return temperature;
}
public void setTemperature(int temperature) {
this.temperature = temperature;
}
public void boilWater(){
for(int i = 90; i < 110; i++){
temperature = i;
//设置被观察已经改变
this.setChanged();
//通知观察则
this.notifyObservers(temperature);
}
}
}
2:显⽰器实现类
package pattern.observer;
import java.util.Observable;
import java.util.Observer;
public class Display extends Observable implements Observer {
private String status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
@Override
public void update(Observable o, Object arg) {
// TODO Auto-generated method stub
this.displayTemperature((Integer)arg);
}
private void displayTemperature(int temperature){ if (temperature > 100){
this.setStatus("沸腾");
this.setChanged();
this.notifyObservers(temperature);
}
}
}
3:报警器实现类
package pattern.observer;
import java.util.Observable;
import java.util.Observer;
/**
* 报警器:观察者
* @author Administrator
*
*/
public class Alarm implements Observer {
@Override
public void update(Observable o1, Object arg1) { this.makeAlarm((Integer)arg1);
}
private void makeAlarm(int temperature){
System.out.println("滴滴,,,⽔已经开了");
System.out.println("⽔温为:" + temperature);
}
}
4:测试代码
package pattern.observer;
public class Client {
public static void main(String[] args) {
//被观察者:热⽔器
Heater heater = new Heater();
//被观察者兼观察者:显⽰器
Display display = new Display();
//观察者:报警器
Alarm alarm = new Alarm();
heater.addObserver(display);
display.addObserver(alarm);
heater.boilWater();
}
}。

相关文档
最新文档