zoukankan      html  css  js  c++  java
  • 设计模式之观察者模式

    设计模式之观察者模式


    一、什么事观察者模式

      如:有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。 每一天的坚持,每一天的收获,我与你同在!!
  • 相关阅读:
    The last access date is not changed even after reading the file on Windows 7
    渗透基础——获得当前系统已安装的程序列表
    Top 10 Best Free Netflow Analyzers and Collectors for Windows
    平安科技移动开发二队技术周报(第十五期)
    Intent传递对象的几种方式
    SQLite基础学习
    2 Java基础语法(keyword,标识符,凝视,常量,进制转换,变量,数据类型,数据类型转换)
    iOS 之应用性能调优的25个建议和技巧
    Fragment事务管理源代码分析
    CMake
  • 原文地址:https://www.cnblogs.com/drubber/p/5920499.html
Copyright © 2011-2022 走看看