设计模式之观察者模式

当对象之间存在一对多的关系时,一个对象发生改变通知它所依赖的对象,这种行为型模式我们称之为观察者模式。

为什么?

解决当一个对象的状态发生改变,需要通知到其他所有它所依赖的对象的问题,并且要做到易用和低耦合,并且保证高度的协作。

怎么做?

观察者模式有三个组成部分:

  1. 观察者(Observer)
  2. 被观察者(Observable)
  3. Client程序

分析:
在java的util包中已经定义了观察者Observer接口和被观察者类Observable,那么如何在Client中让观察者和被观察者关联起来,并做到被观察则发生变化时立刻通知观察者呢?具体采取的做法是:

  1. 新建观察者对象

    1
    2
    3
    4
    //新建观察者
    Observer1 observer1 = new Observer1();
    Observer2 observer2 = new Observer2();
    Observer3 observer3 = new Observer3();
  2. 新建被观察者对象

    1
    2
    //新建被观察者
    Observable observable = new Observable();
  3. 观察者订阅被观察者的状态

    1
    2
    3
    4
    //三个观察者进行观察
    observable.addObserver(observer1);
    observable.addObserver(observer2);
    observable.addObserver(observer3);

其实在这里本质上是将观察者对象全部注入被观察者对象内,这样可以做到当被观察者对象内部有任何变化即可通知到其所持有观察者。

具体代码详见:设计模式学习