Observer 设计模式多线程AOPSwingMVC
程序员文章站
2022-06-08 21:05:22
...
观察者模式的实例描述.
角色的对应关系.
观察者模式的角色:
.设计原则的角度,
.单一职责,将数据生成和数据显示的两个职责分离.
.开闭原则, 增加新的观察者类型,只需要实现观察者接口. 修改一个接口实现,也不会造成太大的影响.
.里氏代换原则,实现观察者接口的类有义务遵守接口中的方法定义,不要重新定义,只要做到这些,那么任一实现之间都可以相互替换.
.依赖倒转原则,被观察者对象不直接依赖一个具体的观察者对象,而是依赖一个接口,实现的变化被隔离.(依赖倒转,依赖抽象)
此处接口的定义是由被观察者对象定义的,而观察者实现这个接口定义.
.组合复用原则,观察者和被观察者是关联的依赖关系,这样可以保证运行时建立它们之间的关系,如增加一个观察者,移除一个观察者.
观察者模式重要的在于通知.当被观察对象状态发生变化时,生成一个事件,通知观察对象.
观察者模式的两种数据传递方式:1.推模式(转发),所观察的对象比较复杂,2.拉模式(委托),所观察的对象比较简单. 3.推拉并用.
观察者与被观察者之间的依赖关系的强弱(几个变体). 观察者注册对象与业务接口首先进行职责分离,因为描述的不是同一内容,然后以继承,关联或组合的依赖方式关联在一起.
观察者模式与事件委托模型.
观察者模式与MVC. Swing中和Web层的设计.
这种职责的分离也可以用来模拟AOP概念的实现.
注意的问题:1.多线程中的流氓型监听器.监听器对象要迅速返回. 观察者并不适合多线程中使用.
2.不要依赖观察者之间的执行顺序.
3.防止监听死循环.监听器修改了源对象,源对象再次触发了监听器.
ex1:推模式.
ex2:拉模式
ex3:推和拉模式混用.
ex4:将被观察对象职责分离,将观察注册功能和业务接口分离. 具体被观察对象使用继承的方式扩展注册类.
ex5:相对于ex4,这里使用组合方式,在业务实现类中,依赖于注册对象,进一步降低对象之间的依赖关系.
角色的对应关系.
观察者模式的角色:
.设计原则的角度,
.单一职责,将数据生成和数据显示的两个职责分离.
.开闭原则, 增加新的观察者类型,只需要实现观察者接口. 修改一个接口实现,也不会造成太大的影响.
.里氏代换原则,实现观察者接口的类有义务遵守接口中的方法定义,不要重新定义,只要做到这些,那么任一实现之间都可以相互替换.
.依赖倒转原则,被观察者对象不直接依赖一个具体的观察者对象,而是依赖一个接口,实现的变化被隔离.(依赖倒转,依赖抽象)
此处接口的定义是由被观察者对象定义的,而观察者实现这个接口定义.
.组合复用原则,观察者和被观察者是关联的依赖关系,这样可以保证运行时建立它们之间的关系,如增加一个观察者,移除一个观察者.
观察者模式重要的在于通知.当被观察对象状态发生变化时,生成一个事件,通知观察对象.
观察者模式的两种数据传递方式:1.推模式(转发),所观察的对象比较复杂,2.拉模式(委托),所观察的对象比较简单. 3.推拉并用.
观察者与被观察者之间的依赖关系的强弱(几个变体). 观察者注册对象与业务接口首先进行职责分离,因为描述的不是同一内容,然后以继承,关联或组合的依赖方式关联在一起.
观察者模式与事件委托模型.
观察者模式与MVC. Swing中和Web层的设计.
这种职责的分离也可以用来模拟AOP概念的实现.
注意的问题:1.多线程中的流氓型监听器.监听器对象要迅速返回. 观察者并不适合多线程中使用.
2.不要依赖观察者之间的执行顺序.
3.防止监听死循环.监听器修改了源对象,源对象再次触发了监听器.
ex1:推模式.
ex2:拉模式
ex3:推和拉模式混用.
ex4:将被观察对象职责分离,将观察注册功能和业务接口分离. 具体被观察对象使用继承的方式扩展注册类.
ex5:相对于ex4,这里使用组合方式,在业务实现类中,依赖于注册对象,进一步降低对象之间的依赖关系.
推荐阅读
-
C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题示例
-
C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题示例
-
设计模式 - 单例模式之多线程调试与破坏单例
-
php设计模式 Observer(观察者模式)
-
设计模式之观察者模式(observer pattern)
-
荐 BAT高频面试系列:设计模式+Spring源码+MyBatis+SpringMVC多线程+MySQL+Redis+框架使用+数据结构算法答案和总结
-
Net设计模式实例之观察者模式(Observer Pattern)
-
java设计模式-Observer(观察者)模式
-
java多线程设计模式(5) wait/sleep的区别
-
java多线程设计模式(3) Java锁机制