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。 每一天的坚持,每一天的收获,我与你同在!!
  • 相关阅读:
    C语言使用正则表达式
    linux 有名管道(FIFO)
    sendto() 向广播地址发包返回errno 13, Permission denied错误
    NSUserDefaults(数据存储)
    iOS开发UI篇—UIScrollView控件实现图片缩放功能
    李洪强iOS开发之-环信02_iOS SDK 介绍及导入
    李洪强iOS开发之-环信01_iOS SDK 前的准备工作
    iOS开发UI篇—UIScrollView控件介绍
    iOS开发UI篇—iOS开发中三种简单的动画设置
    iOS开发UI篇—IOS开发中Xcode的一些使用技巧
  • 原文地址:https://www.cnblogs.com/drubber/p/5920499.html
Copyright © 2011-2022 走看看