观察者模式

描述

场景:
当某个事件发生后,一些类需要对该事件进行响应(我们称为观察者)。

public class Client{
  public void func(){
    //...
    
    //事件发生
    if(event.success){
        //观察者类对事件进行响应
        classA.responseEvent();
        classB.responseEvent();
        //...
    }
  }
}

这样写会非常麻烦,若事件在其他代码里面也会发生,那么当需要增删观察者时,就要改很多地方。此时,观察者模式发挥作用。

代码实现示例

我们可定义一个“观察者注册中心”类,维护观察者列表;当事件发生后,由该注册中心统一通知观察者去响应。

/**观察者注册中心**/
public class MyObservable extends Observable{

    List<Observer> list;
    boolean isChange;
    
    /**添加观察者**/
    void addObserver(Observer o){

    }
    
    /**通知观察者**/
    void notifyObservers(Object arg){
    
    }
    
    /**设置修改标志,当标志改变时,才通知观察者**/
    void setChange(){
    }
}

/**观察者**/
public class MyObserver extends Observer{
  void update(Observable o,Object arg){
    //...
  }
}

其中,Observable和Observer都是JAVA提供的观察者模式的API。

实际应用场景

FAQ

Last Updated:
Contributors: dongyz8