近些日子由于想要做一个日志分析的系统,而Spring MVC异常统一处理使用@ControllerAdvice+ @ ExceptionHandler 注解的方式是比较优秀的方式,因而,重新观看秦小波的设计模式之蝉,书中介绍的知识简单易懂,如有兴许的同学可以购买查看。
1 观察者模式:也叫发布订阅模式,定义对象之间的一种一对多的依赖关系,使得当每一个对象状态在改变,则,依赖它的对象都会得到通知并且自动更新。
2 角色解释
(1)subject被观察者:它必须能够动态的添加、取消观察者,它一般是抽象类或者实现类,仅仅通过完成作为被观察者必须实现的职责,管理观察者并通知观察者。
(2)Observer 观察者:观察者接受到消息之后,即进行update操作,对接受到的信息进行处理。
3 自己动手写观察者模式
(1)定义管理观察者的接口
(2)定义被观察者的活动接口
(3)被观察者的具体实现类
(4)定义观察者的接口
(5)创建两个观察者具体实现类
(6)业务场景
(7)运行结果
至此,一个简单模式的观察者模式好了。
4 Jdk自带的观察者模式框架
(1)定义被观察者,继承 java.util.Observable
(2)定义两个观察者
(3)业务场景类
5 观察者模式的优缺点
(1)优点:观察者和被观察者之间是抽象的耦合,二是,有一套完整的触发机制
(2)缺点:观察者模式需要考虑一下性能问题,一个被观察者,多个观察者,开发和调试会相对比较复杂,而且Java中的消息的通知默认是按照顺序执行的,一个观察者卡壳,就会影响整体的执行效率。
6 项目中的观察者模式的使用场景的改造策略
(1)观察者和被观察者之间的消息沟通
被观察者状态会触发观察者的一个行为,同时会传递一个消息给观察者,在实际中的一般做法是:观察者中的update方法接受两个参数,一个是被观察者,一个是DTO,一个纯洁的DTO一般是一个JavaBean,由被观察者生成,有观察者消费。当然,如果是远程传输,一般的消息是XML格式进行传递。
(2)被观察者尽量自己做主
在设计的时候,尽量不让观察者进行逻辑处理,可以通过增加一个doSomething( boolean isNotifyObs)方法,决定是否通知观察者。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。