首页 > 代码库 > 设计模式之观察者模式
设计模式之观察者模式
设计模式之观察者模式
一、什么事观察者模式
如:有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); } }
设计模式之观察者模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。