1.7 KiB
1.7 KiB
也叫发布订阅模式
Define a one-to-many dependency between objects so that when one object changes state,all its dependents are notified and updated automatically.(定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。)
- Subject 被观察着者
- Observer 观察者
- ConcreteSubject 具体被观察者
- ConcreteObserver 具体观察者
优点
- 观察着和被观察者之间是抽象耦合
- 建立一套触发机制
缺点
开发效率和运行效率问题, 多级触发时的效率
使用场景
- 关联行为场景
- 事件多级触发场景
- 跨系统的消息交换场景,如消息队列的处理机制
注意事项
- 广播链的问题, 消息最多只转发一次,只有一个对象即是观察者也是被观察者
它和责任链模式的最大区别就是观察者广播链在传播的过程中消息是随时更改的,它是由相邻的两个节点协商的消息结构;而责任链模式在消息传递过程中基本上保持消息不可变,如果要改变,也只是在原有的消息上进行修正
- 异步处理问题, 观察者比较多,处理时间比较长,就需要用异步
Java 中的观察者模式
java. util. Observable 和 java. util. Oserver 这两个接口已经是可扩展的父类
项目中真实的观察者模式
- 观察者和被观察者之间的消息沟通
观察者中的 update 方法接收两个参数,一个是被观察者,一个是 DTO
-
观察者响应方式, 观察者如何快速响应, 一个是采用多线程, 二是缓存技术
-
被观察者尽量自己做主
最佳实践
- 文件系统
- 猫鼠游戏
- ATM 取钱
- 广播收音机