设计模式之观察者模式

Posted 农夫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之观察者模式相关的知识,希望对你有一定的参考价值。

设计模式之观察者模式


一、什么事观察者模式

  如:有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 = 0;
    public void setData(int data){
        this.data = 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);
    }
    
}

 

以上是关于设计模式之观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式 行为型模式 -- 观察者模式(发布-订阅(Publish/Subscribe)模式)

js设计模式之实现观察者模式实例代码

PHP设计模式之----观察者模式

PHP 设计模式之观察者模式

设计模式之观察者模式--PHP

设计模式之观察者模式2