观察者模式
观察者接口
interface Observer{
void update(float temperture,float pressure,float humidity);
}
天气预报局接口
interface Subject{
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObserver();
}
观察者实现类
class CurrentConditions implements Observer{
private float temperture;
private float pressure;
private float humidity;
@Override
public void update(float temperture, float pressure, float humidity) {
this.temperture = temperture;
this.pressure = pressure;
this.humidity = humidity;
display();
}
private void display() {
System.out.println(temperture);
System.out.println(pressure);
System.out.println(humidity);
}
}
天气预报局实现类
class WeatherData implements Subject{
private float temperatrue;
private float pressure;
private float humidity;
private ArrayList<Observer> observers;
public WeatherData() {
this.observers = new ArrayList<Observer>();
}
public float getTemperatrue() {
return temperatrue;
}
public float getPressure() {
return pressure;
}
public float getHumidity() {
return humidity;
}
public void dataChange(){
notifyObserver();
}
public void setData(float temperatrue,float pressure,float humidity){
this.temperatrue = temperatrue;
this.pressure = pressure;
this.humidity = humidity;
dataChange();
}
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
if (observers.contains(observer)) {
observers.remove(observer);
}
}
@Override
public void notifyObserver() {
for (int i =0;i<observers.size();i++){
observers.get(i).update(getTemperatrue(),getPressure(),getHumidity());
}
}
}
测试类
public class ObserverTest {
public static void main(String[] args) {
WeatherData weatherData = new WeatherData();
CurrentConditions currentConditions = new CurrentConditions();
weatherData.registerObserver(currentConditions);
weatherData.setData(12.0f,12.0f,12.0f);
weatherData.setData(16.0f,12.0f,12.0f);
weatherData.setData(15.0f,12.0f,12.0f);
}
}