什么是依赖倒置原则
- 高层模块不应该依赖底层模块,两者都应该依赖器抽象。
- 抽象不应该依赖细节,细节应该依赖抽象。
个人理解,高层模块和抽象对应Java里面,应该是抽象类、接口,而底层模块和细节对应Java里面,应该就是具体的实现类,放在咱们开发中怎么理解他们之间的依赖关系呢?假如你需要完成一个功能,但是这个功能,不能自己一个类就能完成的,需要其他的类,那么这个时候就需要用到其他的类,那么你依赖的这个类,最好依赖他的父类或者接口。
举个例子
小王由于想玩一些大型的3D游戏,但是由于目前自己电脑配置太低了,于是想到去升级自己的电脑,于是他升级的配件有CPU、显卡、内存条、硬盘,咱们就以升级内存条为例,目前市场上内存条代次有DDR、DDR2、DDR3、DDR4,小王肯定要想看看自己电脑主板支持什么样的代词,然后去市场选购,这个时候他发现自己需要的DDR3代次的内存条,有不同的厂商产品,那么他只要根据自己需要的代次,选购就行了,根本不需要区分厂商。那么为什么不同厂商生产的内存的都可以使用呢?哈哈,这个就是依赖倒置原则,每个厂商都遵守不同代次的标准,就行了。所以小王只需要关心内存条的代次就行了,符合自己需要的代次的内存条都是可以使用的,压根不需要关心什么厂商生产的。
代码中如何依赖
- 构造函数传递依赖对象。
- Setter方法传递依赖的对象。
- 接口生命依赖的对象,简称接口注入。
代码具体实践
- 每个类尽量都有接口和抽象类,或者都拥有。
- 接口的表面类型尽量是接口或者是抽象类。
尽量根据具体的业务来进行相关的处理,规则是死的,业务是活的,就像JavaBean,不见得非要搞接口和抽象类继承下吧。 - 任何类都不应该从具体了派生。
如果出现的这种情况,可以看看具体的业务,将两者提取一个抽象类或者接口,然后两者在进行继承。 - 尽量不要覆写父类已经实现的方法。
- 结合里斯替换原则进行使用。