2018-01-30设计模式-观察者模式

2018-01-30  本文已影响0人  TheLittleSky

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);

    }

}

上一篇下一篇

猜你喜欢

热点阅读