Observer-提供了一种对象设计,让主题和观察者之间松耦合的对象行为模式。
在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知并自动更新。
设计原则:
1.为了交互对象之间的松耦合设计而努力
气象站设计:
public interface Subject {
public void registerObserver(Observer o);//观察者变量是用来注册的
public void removeObserver(Observer o);//观察者变量是用来删除的
public void notifyObserver();//主题变化时,调用这个方法通知所有的观察者
}
public interface Observer{
//所有观察者必须实现update()方法,以实现观察者接口。
public void update(float temp,....)
}
public interface DisplayElement{
public void display();//可以用策略模式
}
public class WeatherData implements Subject{
private ArrayList observers;
private float temp;//...Subject需要开放的数据
public WeatherData{//构造函数
Observers = new ArrayList();
}
public void registerObserver(Observer o){ observers.add(o) }
public void removeObserver(Observer 0){
int i = observers.indexof(o);
if(i>0) observers.remove(i);
}
public void notifyObserver(){
for(i=0;i<observers.size();i++){
Observer observer = (observer )observers.get(i);
observer .update(temp,....);
}
}
public void setWeatherData(float temp,....){
this.temp = temp;
notifyObserver();//当数据变化时调用notify通知所有对象
}
}
public class CurrentDisplay implement Observer,DisplayElement{
private Subject weatherData;//声明主题的引用变量
public CurrentDisplay (WeatherData weatherData){
this.weatherData = weatherData;
weatherData.registerObserver(this);//本身实现了Observer,注册为观察者。
}
public void update(float temp){
this.temp = temp;
display();
}
public void display(){
system.out.println("temp is"+temp);
}
}