package com.xjj.observer.Obj;
import java.util.Observable;
/*----系统观察者-----
* 1. ‘拉’ 数据型:
* 2. Observer:是类 非接口
* 3. 次序不定
* 4. 违反 “多用组合,少用继承”
* */
//继承自可观察者
public class WeatherData extends Observable {
private float temp;
private float hum;
private float pre;
public WeatherData() {}
public void measureChanged(){
setChanged(); //改变为true
//notifyObservers(); //通知改变为推数据型,未调用
}
public void setMeasure(float temp,float hum, float pre){
this.temp = temp;
this.hum = hum;
this.pre = pre;
measureChanged();
}
//为方便拉数据
public float getTemp() {
return temp;
}
public float getHum() {
return hum;
}
public float getPre() {
return pre;
}
}
package com.xjj.observer.Obj;
public class Main {
public static void main(String[] args) {
//新建主题并通知更新
WeatherData weatherData = new WeatherData();
weatherData.setMeasure(20, 30.2f, 22.2f);
//注册
CurrentDisplay display = new CurrentDisplay(weatherData);
Forecast forecast = new Forecast(weatherData);
//拉数据型
display.update(weatherData, null);
forecast.update(weatherData, null);
}
}
package com.xjj.observer.Obj;
import java.util.Observable;
import java.util.Observer;
import com.xjj.observer.Display;
//当前天气告示板,实现观察者
public class CurrentDisplay implements Display, Observer {
Observable observable;
private float temp;
private float hum;
//注册
public CurrentDisplay(Observable observable) {
this.observable = observable;
//需要Observer参数,this实现之,故可传
observable.addObserver(this);
}
@Override
public void update(Observable o, Object arg) {
//是否能向下转型,拉式数据
if (o instanceof WeatherData) {
WeatherData weatherData = (WeatherData)o;
this.temp = weatherData.getTemp();
this.hum = weatherData.getHum();
display();
}
}
@Override
public void display() {
System.out.println("Current: " + temp + " degree: " + hum);
}
}
package com.xjj.observer.Obj;
import java.util.Observable;
import java.util.Observer;
import com.xjj.observer.Display;
//预测天气告示板
public class Forecast implements Display, Observer {
Observable Observable;
private float temp;
private float hum;
//注册,构造函数有可观察者参数
public Forecast(Observable observable) {
this.Observable = observable;
observable.addObserver(this);
}
@Override
public void update(Observable o, Object arg) {
//能否向下转型
if (o instanceof WeatherData) {
//强制向下转型
WeatherData weatherData = (WeatherData)o;
temp = weatherData.getTemp();
hum = weatherData.getHum();
display();
}
}
@Override
public void display() {
System.out.println("ForeCast: " + temp + " degree: " + hum);
}
}
设计模式--javaJDK--观察者模式
最新推荐文章于 2024-05-29 19:11:59 发布