观察者模式是对依赖倒转原则很好的应用。单纯去看依赖倒转原则,我并不明白。什么“抽象不能依赖细节,细节要依赖抽象的”。看完观察者模式后,我觉得这一原则还是很经典,很实用的。
下面就利用《大话设计模式》中,举的前台和看股票的观察者模式的例子,来说一下我对这一原则的理解。
没有用观察者模式时:
具体的通知者(Secretary)和具体的观察者(StockObserver)二者是相互依赖的。
Secretary类中的Attach(StockObserver observer)方法需要知道StockObserver,而StockObserver也需要知道Secretary的状态SecretaryAction。
从通知者角度看(通知者依赖观察者),那么它本身是高层模块,具体的观察者是低层模块,高层模块依赖低层模块。
从观察者角度看(观察者依赖通知者),那么它本身是高层模块,具体的通知者是低层模块,高层模块依赖低层模块。
这样的坏处是如果具体的观察者发生变化,那么我们需要修改Attach方法,如果通知者发生变化,我们需要修改观察者所依赖的通知者的状态。
用了观察者模式后:
具体的观察者或者是通知者都依赖于更高层次的抽象类。(Observer是具体观察者的抽象,Subject是具体通知者的抽象)即“高层模块不应该依赖低层模块,两个都应该依赖抽象”。
这样的好处是,具体观察者和通知者想怎么变就怎么变,通过增加相应的子类即可,而不是修改现有的类。而他们各自的抽象类不会变,从这里也能看出“变是永远不变的”。
原文链接:https://www.f2er.com/javaschema/285584.html