观察者模式
观察者模式:对象之间多对一的依赖的一种设计方案。
观察者模式UML类图
观察模式的简单实现
Observer:
public interface Observer {
//修改数据
void update(float temperature,float pressure,float humidity);
}
public class ConcreteObserver implements Observer {
private float temperature;
private float pressure;
private float humidity;
@Override
public void update(float temperature,float pressure,float humidity) {
this.temperature = temperature;
this.pressure = pressure;
this.humidity = humidity;
this.display();
}
public void display(){
System.out.println("O>"+temperature);
System.out.println("O>"+pressure);
System.out.println("O>"+humidity);
}
}
Subject:
public interface Subject {
//注册
void registerObserver(Observer observer);
//移除
void remove(Observer observer);
//遍历并通知
void notifyObServer();
}
WeatherData:
public class WeatherData implements Subject {
private float temperature;
private float pressure;
private float humidity;
private ArrayList<Observer> observers;
public WeatherData() {
observers = new ArrayList<>();
}
public float getTemperature() {
return temperature;
}
public void setTemperature(float temperature) {
this.temperature = temperature;
}
public float getPressure() {
return pressure;
}
public void setPressure(float pressure) {
this.pressure = pressure;
}
public float getHumidity() {
return humidity;
}
public void setHumidity(float humidity) {
this.humidity = humidity;
}
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void remove(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObServer() {
for (int i=0;i<observers.size();i++){
observers.get(i).update(temperature,pressure,humidity);
}
}
public void setData(float temperature,float pressure,float humidity){
this.temperature = temperature;
this.pressure = pressure;
this.humidity = humidity;
this.notifyObServer();
}
}
总结
观察者模式,会以集合的方式来管理用户,包括注册,移除,和通知。符合ocp原则。