依赖倒置原则(Dependence Inversion Principle)
该原则规定:
①高层模块不依赖低层模块。两者都应该依赖抽象接口
②抽象不能依赖具体。而具体应该依赖抽象接口
此原则的目的是为了实现解耦。将依赖关系建立在高层,而低层用来做具体实现。因为高层相对稳定,不会经常变动,而具体实现则会经常变动。
其实该原则,在现实生活中也经常用到。以电脑cpu来说,主板厂商定好cpu引脚接口,然后不同的cpu厂商按照此接口来生成cpu。这样对于用户来说,只需要买回cpu和主板,然后将cpu插入主板就行了,完全不用再去关心哪个厂的板子配哪个厂的cpu。在这里,cpu引脚插口就是oop中的抽象接口,cpu厂商按照此接口规则,生成出不同的“具体”cpu,每个型号的cpu就是一个“具体”。
案例分析:
妈妈给孩子读故事书。
class mother { public void Speek(Book book); } class Book { }@H_301_38@ OK,搞定了。但是小孩天天听故事书听烦了,现在心血来潮,要听报纸。这下问题来了,妈妈竟然只会读故事书,不会读报纸啊,这不科学!!!上面一个简单的案例就反应出了依赖具体带来的隐患。下面看看依赖抽象如何实现:
class IWords { } class mother { public void Speek(IWords book); } class Book : public IWords { } class News : public IWords { }@H_301_38@OK,现在无论想听什么,只需要拓展相应的类(派生自IWords)就行了,无需去修改其他原有的类。(呀呀,无意间实现了一个《开闭原则》案例)