设计模式-观察者模式

207 阅读1分钟

观察者模式

定义: 一个对象状态的改变,可以通知到过个对象

类型: 行为类模式

类图:


观察者对象结构:

  • Subject(被观察者)-被观察者定义了观察者集合,行为包括往集合中添加观察者、删除观察者、更新集合观察者

  • ConcreteSubject(被观察者子类)-继承被观察者,实现业务逻辑

  • Observer(观察者)-是一个interface,用来提供统一的update方法,实现被观察者与观察者之间的解耦

  • ConcreteObserver(观察者的子类) - 实现了观察者接口,具体实现了update方法的业务逻辑

/**
 *
 * 目标对象
 **/
public abstract  class Subject {

    protected  Vector<Observer>  observers = new Vector<>();

    public void attach(Observer observer){
        observers.add(observer);
    }

    public void detach(Observer observer){
        if(observers.contains(observer)){
            observers.remove(observer);
        }
    }

    protected void notifyObservers(){
        for (Observer observer:observers ) {
            observer.update();
        }
    }

    public abstract void excute();


}
//被观察者子类
class ConcreteSubject extends Subject {

    @Override
    public void excute() {
        System.out.println("被观察者事件反生");
        this.notifyObservers();
    }

    public static void main(String[] args){
        Subject sub = new ConcreteSubject();
        sub.attach(new ConcreteObserver());
        sub.attach(new ConcreteObserver());
        sub.excute();
    }
}

//观察者接口
interface Observer {

     void update();
}

//观察者实现类
class ConcreteObserver implements Observer {

    @Override
    public void update() {

        System.out.println("通知 ConcreteObserver 对象 更新");
    }
}


注意事项:

  • 当观察者较多时,会使集合类对象较多,性能存在影响
  • java语言中,有一个接口Observer,以及它的实现类Observable,对观察者角色常进行了实现

参考:w3c