首页 > 代码库 > 设计模式之观察者模式

设计模式之观察者模式

设计模式之观察者模式


一、什么事观察者模式

  如:有A,B连个独立的对象,其中B想时时知道A中的变化,以便做出相应的相应或对策。这就是观察者模式

  A为被观察者,B为观察者。 A、B同时均可以为被观察者。

  观察者和被观察者N:N的关系。

二、观察者模式的应用

  (1)周期性任务。比如win7下的定时关机命令shutdown -s -t 1200(1200秒后关机)。这些命令当预期系统时间到后,就可以通知相应的观察者激活相应的命令。

  (2)重新加载配置文件。比如好多大型系统的配置文件,都会在每次修改之后自动重新加载。

三、使用Java类实现观察者模式

  java.util.Observable

    -able一般可能...的单词后缀,Observable是可以被观察的,程序中的被观察者类,需要继承这个类。

  java.util.Observer

    这个是观察者,interface。程序中的观察者类,需要实现这个接口中的uupdate()方法。

 

四、观察者模式实现

  1、被观察者,同时也是观察者; 继承Observable称为被观察者,

package com.ssk.Observable;import java.util.Observable;import java.util.Observer;//被观察者public class NumObservable extends Observable implements Observer{    int data = http://www.mamicode.com/0;    public void setData(int data){        this.data =http://www.mamicode.com/ data;        setChanged();//Marks this <tt>Observable</tt> object as having been changed;        notifyObservers();//通知所有观察者    }
@Override
public void update(Observable o, Object arg) { System.out.println("观察者和被观察者互相被观察!!"); }}

  2、观察者同时也是被观察者

package com.ssk.Observable;import java.util.Observable;import java.util.Observer;//观察者public class NumObserver extends Observable implements Observer {    @Override    public void update(Observable o, Object arg) {//有被观察者发生改变,自动调用对应观察者的的update方法        NumObservable numObservable = (NumObservable) o;        System.out.println("被观察者Numobservable已改变,data:" + numObservable.data);                setChanged();        notifyObservers();    }}

  3、进行单元测试

  

package com.ssk.Observable;import org.junit.Test;public class NumServableTest {        @Test    public void test(){        NumObservable numOable = new NumObservable();        NumObserver numObserver =  new NumObserver();        numOable.addObserver(numObserver);//被观察者绑定观察者        numObserver.addObserver(numOable);//被观察者绑定观察者        numOable.setData(1);        numOable.setData(2);        numOable.setData(3);    }    }

 

设计模式之观察者模式