美文网首页
2018-01-30设计模式-观察者模式

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

作者: TheLittleSky | 来源:发表于2018-01-30 22:25 被阅读0次

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

        }

    }

    相关文章

      网友评论

          本文标题:2018-01-30设计模式-观察者模式

          本文链接:https://www.haomeiwen.com/subject/jwdqzxtx.html