《设计模式之禅》笔记17 -- 观察者模式

定义:也叫发布订阅模式。定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知


并被自动更新。


一、观察者模式的四个角色


1. 被观察者


2. 观察者


3. 具体的被观察者


4. 具体的观察者


二、观察者模式的优点


1. 观察者和被观察者之间是抽象耦合


2. 建立一套触发机制


三、观察者模式的缺点


需要考虑开发效率和运行效率问题,一个观察者卡住,会影响整体的执行效率。一般采用异步的方式解决此问题。


四、观察者模式的使用场景


1. 关联行为的场景。关联行为是可拆分的,而不是“组合”关系


2. 事件多级触发场景


3. 跨系统的消息交换场景,例如消息队列的处理机制


五、观察者模式的注意事项


1. 广播链的问题。在一个观察者模式中最多出现一个对象既是观察者又是被观察者。


它和责任链模式的最大区别就是观察者广播链在传播的过程中消息是随时更改的,它是由相邻的两个节点协商的消息结构;责任链


模式在消息传递过程中基本上保持消息不可变。


2. 异步处理问题。EJB是一个很好的例子。可以看看Message Queue


六、观察者模式的扩展


1. Java世界中的观察者模式。java.util.Observable和java.util.Observer接口是jdk提供的观察者和被观察者的实现类和接口。


2. 项目中真实的观察者模式。系统设计中会对观察者模式做改造,主要包含3个方面


   1) 观察者和被观察者之间的消息沟通。观察者中的update方法接受两个参数:一是被观察者,二是DTO(Data Transfer Object


,数据传输对象),DTO是一个JavaBean,由被观察者生成,供观察者使用


   2) 观察者响应方式。快速响应,使用异步线程或缓存的方式。


   3) 被观察者尽量自己做主。对被观察者的业务逻辑方法实现重载,决定是否通知观察者。


3. 订阅发布模型。EJB中有三个Bean:Session Bean, Entity Bean, MessageDriven Bean。


七、最佳实践


常见场景:文件系统、猫鼠游戏、ATM取钱、广播收音机
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值