文章目录
观察者模式
定义
观察者模式属于 行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使它们能够自动更新自己。
主要构成
Subject (抽象被观察者)
将所有观察者对象保存到一个集合里(通常是ArrayList),主题可以有任意数量的观察者,抽象主题提供增加、删除观察者对象的接口(attach、detach)
Observer (抽象观察者)
它定义了一个更新接口方法(update),使得在得到主题更改通知时更新自己
ConcreteSubject (具体被观察者)
有关状态存入具体观察者对象,具体被观察者的内部状态发生改变时,给所有加入过的观察者发送通知。
ConcreteObserver (具体观察者)
实现抽象观察者定义的更新接口,以便在得到主题更改时更新自身的状态
例子
微信公众号是被观察者
,关注了该公众号的个人微信用户是观察者
,有多个微信用户关注了该公众号,当公众号发推文时,会通知这些关注了的微信用户。
优缺点
优点
解除耦合,让耦合的双方都依赖于抽象,从而使得各自的变换都不会影响另一边的变换
缺点
调试复杂,而且在Java中消息的通知一般是按顺序执行的,那么一个观察者卡顿,会影响整体的执行效率,在这种情况下,一般会采用异步实现。