观察者模式与依赖倒转原则
观察者模式是对依赖倒转原则很好的应用。单纯去看依赖倒转原则,我并不明白。什么“抽象不能依赖细节,细节要依赖抽象的”。看完观察者模式后,我觉得这一原则还是很经典,很实用的。 下面就利用《大话设计模式》中,举的前台和看股票的观察者模式的例子,来说一下我对这一原则的理解。 没有用观察者模式时: 具体的通知者(Secretary)和具体的观察者(StockObserver)二者是相互依赖的。
Secretary类中的Attach(StockObserver observer)方法需要知道StockObserver,而StockObserver也需要知道Secretary的状态SecretaryAction。 从通知者角度看(通知者依赖观察者),那么它本身是高层模块,具体的观察者是低层模块,高层模块依赖低层模块。 从观察者角度看(观察者依赖通知者),那么它本身是高层模块,具体的通知者是低层模块,高层模块依赖低层模块。 这样的坏处是如果具体的观察者发生变化,那么我们需要修改Attach方法,如果通知者发生变化,我们需要修改观察者所依赖的通知者的状态。 用了观察者模式后:
具体的观察者或者是通知者都依赖于更高层次的抽象类。(Observer是具体观察者的抽象,Subject是具体通知者的抽象)即“高层模块不应该依赖低层模块,两个都应该依赖抽象”。 这样的好处是,具体观察者和通知者想怎么变就怎么变,通过增加相应的子类即可,而不是修改现有的类。而他们各自的抽象类不会变,从这里也能看出“变是永远不变的”。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c – 在Linux中获取主板设备ID和BIOS串行
- 我眼中的flash cache
- 我对jmp selector:offset模型的理解
- 使用单一连接编写多个帖子请求 – PHP
- XMLHttpRequest对象的status属性状态吗
- ajax ---异步javascript&&xml
- 关于 Exception: An invalid XML character (Unicode: 0x0)
- Flex:排序 – 编写自定义compareFunction?
- c – 使用reinterpret_cast将std :: vector中的数据重新整形
- 执行模型之可变跑道(Elastic Racetrack)