解释:高层模块不应该依赖低层模块。两个都应该依赖抽象。抽象不应该依赖细节。细节应该依赖抽象。
说白了就是,针对接口编程,不要对实现编程。
-
什么叫做高层模块依赖底层模块?
-
面向过程开发,为了使常用代码可以复用,一般会把常用代码携程许多的函数的程序库,做新项目的时候,直接调用低层的函数。比如,项目访问数据库,我们把访问数据库的代码写成函数,每次写新项目就调用这些函数,这就叫做高层模块依赖低层模块。
-
-
存在问题:
-
如果新项目业务逻辑的高层模块都是一样的,客户却希望使用不同的数据库,我们希望能再次利用这些高层魔魁啊,但是高层模块跟底层的访问数据库是绑定在一起的,就没办法复用这些高级模块
-
pc里如果CPU、内存、硬盘都依赖具体的主板、主板一坏、所有的部件就都不能用了
-
-
解决办法:
-
高低模块都依赖抽象,具体一点就是接口或者抽象,只要接口是稳定的,那么任何一个的更改都不用担心其他的受到影响,这就可以使高低模块都能很容易的被复用
-
-
疑问:为什么依赖了抽象的接口或者抽象类就不怕被更改了呢?
-
里氏替换原则
-
里氏替换原则
解释:子类型必须能够替换掉他们的父类型
只有当子类可以替换掉父类,软件功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。
比方说,猫是继承动物类的,以动物的身份拥有吃、喝、跑、叫等行为,可当某一天,我们需要狗、牛、羊也拥有类似的行为,由于它们都是继承于动物,所以除了更改实例化的地方,程序其他处不需要改变。
依赖倒转其实就是谁也不要依靠谁,除了约定的接口,大家都可以灵活自如。