java设计模式学习笔记6 观察者模式

来源:互联网 发布:2008数据库重建日志 编辑:程序博客网 时间:2024/06/05 01:51

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听同一个主题对象,当主题对象内部状态发生变化时,通知所有观察者

观察着模式在java中又很重要的应用和地位,在awt,Swing的监听器中应用广泛,java甚至对他提供了内置的支持。

观察者模式有以下组成:

-两个抽象角色:

---抽象主题角色:将所有观察者对象的引用放到一个集合里,提供接口用于增删,一般用抽象类或者接口实现,使用java提供的Observable接口

---抽象观察者:使用java提供的Observer接口

-两个具体角色:

---具体主题角色:当具体主题内部状态改变时,给所有登记过的观察者,发通知,实现Observable接口。

---具体观察者角色:实现Observer接口,重写update方法


测试:

一、具体主题角色,实现java内置的抽象主题接口 Observable

/** * Created by charleszhu on 14-2-3. * 具体主题角色 */public class MyObserverable extends Observable {    public void notifyTwoOb(int i){ // 自定义通知方法        for(;i>0;i--){            this.setChanged();//状态改变的时候,一定改变changed的值            this.notifyObservers(i);// 通知所有观察者状态已经发生的变化        }    }}
二、定义两个观察者角色,方法,实现java内置的Observer接口

/** * Created by charleszhu on 14-2-3. */public class MyObserve implements Observer {    // 监听对象,当对象的参数减少时候,输出    @Override    public void update(Observable o, Object arg) {       // Integer i = (Integer)arg;        System.out.println(arg);    }}

/** * Created by charleszhu on 14-2-3. */public class MyObserve1 implements Observer {    // 监听对象,当对象的参数减少到5的时候,输出    @Override    public void update(Observable o, Object arg) {        Integer i = (Integer)arg;        if (i<=5)            System.out.println(i);    }}

三 写测试类

/** * Created by charleszhu on 14-2-3. */public class Test {    public static void main(String[] args) {        // 生成主题对象实例        MyObserverable mb = new MyObserverable();        // 生成两个观察者        Observer o1 = new MyObserve();        Observer o2 = new MyObserve1();        // 将观察者放入主题中        mb.addObserver(o1);        mb.addObserver(o2);        // 调用通知观察者方法        mb.notifyTwoOb(10);    }}



0 0