• 设计模式之观察者模式


    设计模式之观察者模式


    一、什么事观察者模式

      如:有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);
        }
        
    }
    lift is made up of small pleasures. 生活是由各种微小的幸福构成。 日积月累,就会产生意想不到的Miracles。 每一天的坚持,每一天的收获,我与你同在!!
  • 相关阅读:
    使用ar_receipt_api_pub.apply失误
    部门组织架构和岗位变更
    值集不能修改的原因
    ShopEx安装过程
    javascript二分法
    增加TableSpace
    刚毕业的大学生,你到底为什么被解雇掉了?(转)
    oracle EBS关闭窗口出现红条(进度/进展)
    分享一个jQuery的时间轴插件:TimergliderJS
    分享另外一个jQuery的超酷幻灯插件:jQuery Chop Slider 2.0
  • 原文地址:https://www.cnblogs.com/drubber/p/5920499.html
Copyright © 2020-2023  润新知