观察者模式学习之路
UML类图
源码实现
此处省略 观察者Sina,CurrentCondition,代码与BaiduSite 类似
package com.atdhl.observer;
public interface Observer {
public void update(float temperature,float pressure, float humidity);
}
package com.atdhl.observer;
public interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObserver();
}
package com.atdhl.observer;
public class BaiduSite implements Observer {
private float temperature;
private float pressure;
private float humidity;
public void update(float temperature, float pressure, float humidity) {
this.humidity = humidity;
this.pressure = pressure;
this.temperature = temperature;
display();
}
public void display() {
System.out.println("*****Today BdTemperature:" + temperature + "*****");
System.out.println("*****Today BdPressure:" + pressure + "*****");
System.out.println("*****Today BdHumidity:" + humidity + "*****");
}
}
package com.atdhl.observer;
import java.util.ArrayList;
public class WeatherData implements Subject {
private float temperature;
private float pressure;
private float humidity;
private ArrayList<Observer> observers;
public WeatherData() {
observers = new ArrayList<Observer>();
}
public void dataChange() {
notifyObserver();
}
public void setData(float temperature, float pressure,float humidity) {
this.humidity = humidity;
this.pressure =pressure;
this.temperature = temperature;
dataChange();
}
@Override
public void registerObserver(Observer o) {
observers.add(o);
}
@Override
public void removeObserver(Observer o) {
if(observers.contains(o))
observers.remove(o);
}
@Override
public void notifyObserver() {
for (int i = 0; i < observers.size();i++) {
observers.get(i).update(this.temperature, this.pressure,this.humidity);
}
}
}
package com.atdhl.observer;
public class client {
public static void main(String[] args) {
WeatherData weatherData = new WeatherData();
CurrentConditions currentConditions = new CurrentConditions();
BaiduSite baiduSite = new BaiduSite();
weatherData.registerObserver(currentConditions);
weatherData.registerObserver(baiduSite);
System.out.println("通知各个注册的观察者,看看信息");
weatherData.setData(10f, 100f, 30.3f);
weatherData.removeObserver(currentConditions);
System.out.println();
System.out.println("通知各个注册的观察者,看看信息");
weatherData.setData(10f, 100f, 30.3f);
}
}
效果图