欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Observer 设计模式多线程AOPSwingMVC 

程序员文章站 2022-06-08 21:12:39
...
观察者模式的实例描述.



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





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

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

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

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


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

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

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

注意的问题:1.多线程中的流氓型监听器.监听器对象要迅速返回. 观察者并不适合多线程中使用. 
            2.不要依赖观察者之间的执行顺序.
            3.防止监听死循环.监听器修改了源对象,源对象再次触发了监听器.
       
               
ex1:推模式.
ex2:拉模式
ex3:推和拉模式混用.
ex4:将被观察对象职责分离,将观察注册功能和业务接口分离. 具体被观察对象使用继承的方式扩展注册类.
ex5:相对于ex4,这里使用组合方式,在业务实现类中,依赖于注册对象,进一步降低对象之间的依赖关系.