headfirst书中举了个气象站的例子用来讲解观察者模式。
气象站包括物理装置检测数据,WeatherData对象获取数据,布告板公布数据。WeatherData就是个被观察者,可以定义多个观察者(布告板)来获取被观察者的数据。观察者模式可以使得依赖于某一对象的依赖者会根据该对象状态改变而自动更新。观察者富有弹性,可以添加可以删除。观察者和被观察者之间也是松耦合,因为被观察者只知道观察者实现了Observer接口,不了解具体实现该接口的类有哪些。
类图如下:
建立3个接口:
Subject:
- public interface Subject {
- public void registerObserver(Observer o); //注册观察者
- public void removeObserver(Observer o); //删除观察者
- public void notifyObserver(); //发布更新
- }
Observer:
- public interface Observer {
- public void update(float temp,float humidity,float pressure); //定义了update方法
- }
DisplayElement:
- public interface DisplayElement {
- public void display();