2020-07-07
观察者模式
观察者模式的意图是在多个对象之间定义一对多的依赖关系(观察者聚合在被观察者中),当一个对象(被观察者)的状态发生改变时,会通知依赖于它的对象(观察者),并根据新状态做出相应的反应
使用场景
- 关联行为场景。关联行为是可拆分的,而不是“组合”关系
- 事件多级触发场景。
- 跨系统的消息交换场景。
广播链问题
一个观察者可以有双重身份,既是观察者,也是被观察者,根据经验建议,在一个观察者模式中,既是观察者也是被观察者的对象最多出现一个,也就是说消息最多转发一次(传递两次)
拓展
观察者与被观察者之间的消息沟通
在实际中一般的做法是:观察者的update方法接受两个参数,一个是被观察者,一个是DTO(Data Transfer Object。数据传输对象),DTO一般是一个纯洁的JavaBean,由被观察者生成,由观察者消费,如果考虑到远程传输,一般消息是以XML格式传递
观察者如何快速响应
- 多线程
- 缓存
被观察者的状态改变不一定都要通知观察者,可以对被观察者的方法进行重载,在原方法的参数列表中添加一个布尔类型的参数,决定是否通知观察者
参考文献
《Java设计模式(第二版)》
《设计模式之禅》