设计模式六大原则3---》依赖倒置原则(Dependence Inversion Principle)

依赖倒置原则定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来实现。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是底层模块,负责基本的原子操作;假如修改A,会给程序带来不必要的风险。
解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。
依赖倒置原则基于这样的一个事实;相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建起来的框架比细节为基础搭建起来的架构要稳定的多。抽象指的是接口或者抽象类,细节就是具体的实现类,使用接口或者抽象类的目的是制定好的规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。
依赖倒置原则的核心思想是面向接口编程,我们依旧用一个例子来说明面向接口编程比相对于面向实现编程好在什么地方。场景是这样,定义骑行单车的接口,然后定义两个类来 实现骑行单车的接口;最后运行

最后如果中间实现的类发生变化,不会影响接口AbstactBike,以及接口的调用类Ride.
注意点:1.底层模块尽量都要有抽象类或接口,或者两者都有。2.变量的声明类型尽量是抽象类或接口。3.使用继承时遵循里氏替换原则,依赖倒置的原则核心就是要我们面向接口编程。