现在的位置: 首页 > 综合 > 正文

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

2014年07月17日 ⁄ 综合 ⁄ 共 1299字 ⁄ 字号 评论关闭

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

观察着模式在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);

    }

}

抱歉!评论已关闭.