【发布时间】:2020-07-26 19:48:33
【问题描述】:
更新添加了完整的代码以便于理解。
我正在尝试了解如何使用 Java 内置的 Observer 实现推送通知和拉取通知。
Observable 类有 2 个方法 notifyObservers() 和 notifyObservers(Object arg)
根据文档:
每个观察者都有自己的 update 方法,并使用两个参数调用:这个可观察对象和 arg 参数。
这是我的观察者类
public class CurrentConditionsDisplay implements Observer, DisplayElement {
private float temperature;
private float humidity;
private Observable observable;
public CurrentConditionsDisplay(Observable observable) {
this.observable = observable;
observable.addObserver(this);
}
@Override
public void display() {
System.out.println("Current conditions: " + temperature + "F degrees and "
+ humidity + "% humidity");
}
@Override
public void update(Observable o, Object arg) {
/*
if (o instanceof WeatherData) {
WeatherData weatherData = (WeatherData) o;
this.temperature = weatherData.getTemperature();
this.humidity = weatherData.getHumidity();
}*/
if (arg instanceof WeatherData) {
WeatherData weatherData = (WeatherData) arg;
this.temperature = weatherData.getTemperature();
this.humidity = weatherData.getHumidity();
}
display();
}
在我的可观察类中
public class WeatherData extends Observable {
private float temperature;
private float humidity;
private float pressure;
private void measurementsChanged() {
setChanged();
//notifyObservers();
notifyObservers(this);
}
public void setMeasurements(float temperature, float humidity, float pressure) {
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
measurementsChanged();
}
public float getTemperature() {
return temperature;
}
public float getHumidity() {
return humidity;
}
public float getPressure() {
return pressure;
}
这两种方法我都试过了,两个对象都可以转换成 WeatherData(观察者),然后从中获取数据。
使用这两种方法对我来说似乎是推送通知类型,那么有什么区别? 以及如何使用它实现拉通知类型?
【问题讨论】:
-
我刚读过。我正在阅读 head first 设计模式,它说使用这个内置模式。我可以选择接收推送或拉取通知,但我不知道该怎么做。
-
拉动 == 轮询
标签: java design-patterns observable