观察者(Observer)模式
直观的理解就是因果模式,并且是一因多果。类比数学中的函数,因变量随自变量变化而变化。
观察者模式,侦测被观察者的行为变动。一旦被观察者发生了变化,那么这一行为会被所有观察者所知晓。
java中的具体实现
- 继承java.util.Observable类。
- 构建方法私有化。拒绝通过new对象的方式去创建对象,而是通过getInstance()方法去传递对象。
- 具体逻辑中通过继承的方法setChange()来设置被观察者发生变化,notifyObservers()方法来通知所有的观察者。
思考:
怎么做到通知了所有的观察者呢?
点开setChanged()可以看到是改变了一个boolean值。可以看作是开关被打开了。
执行notifyObservers()就是将所有的观察者都拿出来,执行了一个遍update()方法。
想要自定义update方法只需要实现Observer接口
总结:
优点: 1、观察者和被观察者是抽象耦合的。 2、建立一套触发机制。
缺点: 1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。 2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。 3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。