观察者模式(observer)

定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并被自动更新 优点:观察者和被观察者之间是抽象耦合,容易扩展,建立一套触发机制 缺点:开发效率和运行效率堪忧,推荐采用异步的方式.

1.1. 角色

Subject被观察者:定义被观察者必须实现的职责,它必须能够动态的增加,取消观察者.一般是抽象类或实现类. Observer观察者:观察者接收到消息后,即进行update操作,对接收到的信息进行处理 ConcreteSubject具体被观察者:定义被观察者自己的逻辑,同时定义对哪些时间进行通知 ConcreteObject具体观察者:每个观察者在接收到消息后的处理反应是不同,拥有自己的处理逻辑

被观察者

public class Observable {
    /** Vector利用同步方法来线程安全,线程安全在多线程情况下不会造成数据混乱 */
    private Vector<Observer> obs = new Vector();;       

    /**  
     * @Description  新增一个观察者
     * @param o   
     */
    public synchronized void addObserver(Observer o) {
        if (o == null)
            throw new NullPointerException();
        if (!obs.contains(o)) {
            obs.addElement(o);
        }
    }

    /**  
     * @Description 删除观察者
     * @param o   
     */
    public synchronized void deleteObserver(Observer o) {
        obs.removeElement(o);
    }

    /**  
     * @Description  通知观察者 
     */
    public void notifyObservers() {
        for(Observer o :this.obs) {
            o.update();
        }
    }
}

观察者

public interface Observer {
    /**  
     * @Description 更新方法
     */
    void update();
}

results matching ""

    No results matching ""