Observer

观察者模式的实例描述.


角色的对应关系.
观察者模式的角色:



.设计原则的角度,
.单一职责,将数据生成和数据显示的两个职责分离.
.开闭原则, 增加新的观察者类型,只需要实现观察者接口. 修改一个接口实现,也不会造成太大的影响.
.里氏代换原则,实现观察者接口的类有义务遵守接口中的方法定义,不要重新定义,只要做到这些,那么任一实现之间都可以相互替换.
.依赖倒转原则,被观察者对象不直接依赖一个具体的观察者对象,而是依赖一个接口,实现的变化被隔离.(依赖倒转,依赖抽象)
此处接口的定义是由被观察者对象定义的,而观察者实现这个接口定义.
.组合复用原则,观察者和被观察者是关联的依赖关系,这样可以保证运行时建立它们之间的关系,如增加一个观察者,移除一个观察者.

观察者模式重要的在于通知.当被观察对象状态发生变化时,生成一个事件,通知观察对象.

观察者模式的两种数据传递方式:1.推模式(转发),所观察的对象比较复杂,2.拉模式(委托),所观察的对象比较简单. 3.推拉并用.

观察者与被观察者之间的依赖关系的强弱(几个变体). 观察者注册对象与业务接口首先进行职责分离,因为描述的不是同一内容,然后以继承,关联或组合的依赖方式关联在一起.


观察者模式与事件委托模型.

观察者模式与MVC. Swing中和Web层的设计.

这种职责的分离也可以用来模拟AOP概念的实现.

注意的问题:1.多线程中的流氓型监听器.监听器对象要迅速返回. 观察者并不适合多线程中使用.
2.不要依赖观察者之间的执行顺序.
3.防止监听死循环.监听器修改了源对象,源对象再次触发了监听器.


ex1:推模式.
ex2:拉模式
ex3:推和拉模式混用.
ex4:将被观察对象职责分离,将观察注册功能和业务接口分离. 具体被观察对象使用继承的方式扩展注册类.
ex5:相对于ex4,这里使用组合方式,在业务实现类中,依赖于注册对象,进一步降低对象之间的依赖关系.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值