依赖倒置抽象的概念:
1、高层模块不应该依赖底层模块,两者都应该依赖其抽象。
2、抽象不应该依赖细节。
3、细节应该依赖抽象。
依赖倒置的具体的表现:
1、模块间的依赖通过抽象发生,实现类之间不直接发生依赖关系。(依赖关系通过接口或者抽象类)
2、接口或者抽象类不依赖于实现类。
3、实现类依赖接口 或者 抽象类
上面提到的可以用一句话概括,面向接口编程(面向对象设计的精髓)。
优点:
采用依赖倒置原则,可以减少类之间的耦合性。提高系统的稳定性,提高可读性和可维护性。
当需求的变更时,最终只需要修改高层的业务场景类(也就是调用的地方)
依赖倒置对并行开发的影响:
1、只要定义两者之间的接口(或者抽象类),就可以独立开发了
2、项目单元测试也可以独立地运行,就可以测试驱动开发(这是依赖倒置的最高应用场景)
抽象更深入的理解:
1、抽象是对实现的约束,对实现者而言,是一种契约(约束作用)
2、约束自己也约束别人,保证双方按照契约(抽象)就行开发
依赖倒置中依赖的三种方法:
1、构造函数,传递依赖对象 例如:public Driver( ICar_car){}
2、通过setter 方法 例如:public void setCar(ICar_car){}
3、接口声明 例如:public class Benz implements ICar{}
践行依赖倒置原则:
1、每个类尽量都有接口 或者 抽象类,或者抽象类和接口两者并存
2、变量的表面类型尽量是接口或者是抽象类
3、任何类不应该从具体类派生
4、尽量不要覆写基类已经实现的方法
5、结合里氏替换原则使用
通俗讲:
1、接口负责定义公共的属性和方法,并且声明与其他对象的依赖关系
2、抽象类负责公共构造部分的实现
3、实现类实现业务逻辑,并且适当进行细化扩展
总结:
1、变量的表面类型尽量是接口或者是抽象类
2、每个类尽量都有接口 或者 抽象类,或者抽象类和接口两者并存
3、记住一点,面向接口编程,就抓住了依赖倒置原则的核心