观察者模式(行为型)

来源:互联网 发布:搜索电影免费网络观看 编辑:程序博客网 时间:2024/06/01 03:58

观察者模式

    定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

 适用性 

    1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。
      将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。
    2.当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。
    3.当一个对象必须通知其它对象,而它又不能假定其它对象是谁。
结构类图
headfirst实例类图:
系统结构
主题类:
public class WeatherData extends Observable{private float humidity;private float pressure;private float temperature;public WeatherData(){}    /**     * 定义三个get方法,方便观察这抓取信息     * @return     */public float getHumidity() {return humidity;}public float getPressure() {return pressure;}public float getTemperature() {return temperature;}private void measurementsChanged() {// TODO Auto-generated method stubsetChanged();notifyObservers();} public void serMessured(float tem,float humid,float pres){this.humidity=humid;this.temperature=tem;this.pressure=pres;measurementsChanged();}public void setPressure(float pressure) {this.pressure = pressure;}}

具体观察者:
public class ConcreteObserve implements Observer {private Observable observable = null;private float temperature;private float humit;public ConcreteObserve(Observable o) {this.observable = o;this.observable.addObserver(this);}public void update(Observable o, Object arg) {if(o instanceof WeatherData){WeatherData weatherData =(WeatherData) o;this.temperature=weatherData.getTemperature();this.humit=weatherData.getHumidity();show();}}public void show(){System.out.println("我具体观察到被观察者的变化"+"temp="+this.temperature+"humi="+this.humit);}}

测试类:
public class testC {/** * @param args */public static void main(String[] args) {//定义一个主题WeatherData weatherdate =new WeatherData();//创建一个观察者ConcreteObserve concreteObserve=new ConcreteObserve(weatherdate);//第一次主题改变weatherdate.serMessured(1.0f, 1.0f, 1.0f);//第二题改变weatherdate.serMessured(2.0f, 2.0f, 2.0f);}}

测试结果:
我具体观察到被观察者的变化temp=1.0humi=1.0我具体观察到被观察者的变化temp=2.0humi=2.0
0 0
原创粉丝点击