依赖倒置原则的定义:
高层模块不应该依赖你低层模块,两者都应该依赖其抽象。 抽象不应该依赖细节。 细节应该依赖抽象。
抽象就是指接口或抽象类,两者都是不能被直接实例化的。细节就是实现类,实现接口或继承抽象类而产生的类就是绿茸茸,其特点就是可以直接被实例化。也就是可以加上一个关键字 new 产生一个对象
更精简的定义就是” 面向接口编程“ OOD (Object Oriented Design, 面向对象设计) 的精髓之一。
采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。
依赖的三种写法
对象的依赖关系有三种方式来传递: 1. 构造函数传递依赖对象
在类中通过构造函数声明依赖对象,按照依赖注入的说法,这种方式叫做 构造函数注入。
2. Setter 方法传递依赖
在抽象中设置 Setter 方法声明依赖关系,依照依赖注入的说法,这是 Setter 依赖注入。
3.接口声明依赖对象
在接口方法中声明依赖对象,这种方式叫做 接口注入
最佳实践: 依赖倒置原则的本质已经通过抽象(接口或抽象类)使各个 灶或模块的实现彼此独立,不互相影响,实现模块间的松耦合,那在项目中怎么使用这个规则呢? 只要遵循以下的几个 规则就可以: 1. 每个类尽量都有接口或抽象类,或者抽象类和接口两者都具备, 这是依赖倒置的基本要求,接口和抽象类都 是属于抽象的,有了抽象才可能依赖倒置
2. 变量的表面类型心里是接口或者是抽象类
3.任何类都不该从具体类派生
4. 尽量不要覆写基类的方法 如果一个基类一个抽象类,而且这个 方法已经实现了,尽量不要覆写,类间依赖的是抽象,覆写了抽象方法,对依赖的稳定性会产生一定的影响。
5. 结合里氏替换原则使用 接口负责定义 public 属性和方法,并且声明与其它对象的依赖,抽象类负责公共构造部分的病,实现类准确的实现业务逻辑,同时在适当的时候对父类进行细化。
依赖倒置原则在小型项目中很难体现出来,但是,在一个大型项目中,采用依赖倒置原则有非常多的优点,特别是回避一些非技术因素引起的问题,项目越大,需求变化的概率也越大,通过彩依赖倒置设计的接口或抽象类对实现类进行约束,可以减少需求变化的工作量剧增的情况。
依赖倒置原则是6个设计则中最难以寅实现的原则,它是实现开闭的重要 途径,依赖倒置原则没有实现,就别想峄扩展开放,对修改关闭。在项目中,大家只要记住是”面向接口编程“就基本上抓住了依赖倒置原则的核心。