四、依赖倒置(倒转)原则

2018-10-28  本文已影响3人  Serenity那年

依赖倒置原则:抽象不依赖细节,细节应该依赖抽象;说白了就是:针对接口编程,不要对实现编程。
举个例子:在生活中我们使用的pc电脑,我们可以把它理解成大的软件系统,里面的部件如CPU、内存条、硬盘、显卡等可以理解为程序中封装的类,由于PC易插拔的方式,那么不管哪个出了问题,都可以在不影响其他部件的前提下进行修改或替换(职责单一原则),而内存不够了,加个硬盘即可(开闭原则);我们知道CPU的对外都是针脚式或者触点式等标准接口,只需要把接口定义好,内部再复杂也不让外部知道,而主板只需要预留与CPU针脚的插槽就可以了(依赖倒置原则);

无论主板还是内存条,或者CPU等都是针对接口设计的,如果针对实现设计,那么内存条就要对应到具体品牌的主板,就会出现换内存就可能要换主板,这tmd就尴尬了;因此要针对接口编程,不是对实现编程;


那"倒置"怎么解释呢?

在面向过程的编程中,我们为了使一些常用的代码能够复用,一般都会把这些代码写成许多函数或者函数库,这样我们在做新项目的时候,导入这些库去调用就可以了;比如说我们做项目常常需要访问数据库,所以我们就把访问数据库的代码写成函数,每次开发新项目的时候去调用这些函数就可以了--这叫高层模块依赖底层模块;问题就出现在这里,高层模块的业务逻辑依赖于底层模块,但是如果需要用不同的数据库或者储存方式,这时就出问题了:就没有办法复用这些函数库,修改底层时高层的调用也要修改;
为了解决这个问题,我们让高层和底层都依赖于抽象,具体一点就是依赖接口或者抽象类,只要接口稳定,那么任何一个地方修改了都不用担心其他地方受到影响;这就使得无论高层模块还是底层模块都可以很容易的被复用;
像这种不在依赖底层了,都同时依赖抽象,我们就称这种依赖关系为:倒置;

那么问题来了,为什么依赖了抽象或者接口,就不怕高层或者底层更改呢?这就需要下一个设计原则--里式替换原则;

上一篇下一篇

猜你喜欢

热点阅读