依赖倒置原则(Dependence Inversion Principle, DIP)
依赖倒置原则的包含如下的三层含义:
- 高层模块不应该依赖低层模块,两者都应该依赖其抽象
- 抽象不应该依赖细节
- 细节应该依赖抽象
首先
如果不使用依赖倒置原则,例如
人有一个技能为喝水,水杯有个技能为装水,那么水杯(Cup)这个类依赖于(人)这个类,只有人才能给水杯倒水。
人调用Cup中的fillWater()方法。这里的Man类与Cup类都是对象级依赖,这样以来的缺点就是耦合度很高。
假如有一天Man换了一个新水杯(newCup)那么,之后Man还需要学习怎么使用这个新水杯(newCup),所以就会很麻烦。
然后
如果使用依赖倒置原则,例如
使用依赖倒置原则的好处就是,假如有一天小李不是用原来那个水杯喝水了,假如某天小王要借用小李的水杯,只需要调用接口来就可以了。
可以看见类图中的人接口(IMan)和水杯接口(ICup)。这样耦合度就很低了。
总结
依赖倒置原则
- 类都要有接口
- 变量尽量都要是接口
- 不要重写已经写好的类里面的方法
- 类不要从具体里面派生出来
总之就是尽量要使各个板块独立出来从而降低耦合度。