- 定义
- 一种一对多的依赖关系,让多个观察者对象监听某一个主题对象。这个主题对象发生动态变化时,会通知所有观察者对象使他们能够自己更像自己。
- 模式结构
- 抽象主题角色
- 具体主题角色
- 抽象观察者角色
- 具体观察者角色
- 使用场景
- 当一个对象的改变需要同时改变其他对象的时候
- 解除耦合,让耦合的双方都依赖于抽象而不是依赖于具体实现
- 优点
- 松耦合
- 符合开闭原则,当有新的观察者进来时,只需要新增一个实现观察者接口的类即可。
- 缺点
- 客户端必须知道所有的观察者,并进行添加和删除
- 如果观察者很多那么 所有观察者都接到消息比较耗费时间。
- 事件委托
- 模型
- 推模型
- 主题对象向观察者推送主题的详细信息,不管观察者是否需要,推送的信息通常是主题对象的全部或部分数据。
- 拉模型
- 主题对象在通知观察者的时候,只传递少量信息。如果观察者需要更具体的信息,由观察者主动到主题对象中获取,相当于是观察者从主题对象中拉数据。
- 一般这种模型的实现中,会把主题对象自身通过update()方法传递给观察者,这样在观察者需要获取数据的时候,就可以通过这个引用来获取了
- 推模型
- 应用场景
- RxJava
- jdk
- Observer
- Observable
- spring
- ApplicationListener
- 购买完火车票后需要记录日志和短信通知
- // TODO 具体代码参考其他博客与特定情境写了两版。后续待上传到github上再抛出地址
观察者模式
最新推荐文章于 2022-12-02 17:51:16 发布