北京总部

依赖倒置原则丨组装汽车的例子

作者: 来源: 时间: 2017-02-17 13:59:27

依赖倒置原则是SOLID原则中最后的原则。图示如下:

依赖倒置原则图示

它的意思是:

“高层次的模块不应该依赖于低层次的模块,而是,都应该依赖于抽象。”我们用一个现实的例子来理解。你的汽车是用很多部件组成,比如发动机,车轮,空调和其他的部件,是吧?


同学:是啊,当然是这样!


小卓:你看,它们并没有严格的构建在一个部件里;就是说,它们都是“插件”,要是引擎或着车轮出了问题,你可以单独修理它,甚至换一个用。

替换时,你只需要保证沉沦符合汽车的设计(汽车能使用任何1500CC的引擎或任何18寸的车轮)。

当然,你可以在1500CC 的位置上安装2000 CC的引擎,对某些制造商都一样(丰田汽车)。

可如果你的汽车部件不是“可拔插”的呢?

同学:那太可怕了!这样的话,要是汽车引擎故障,你得整车修理,或者买一辆新车!


小卓:是的,那么怎么做到"可插拔"呢?

同学:关键是“抽象”,是吧?


小卓:对。现实世界中,汽车是高层级的模块/实体,它依赖于底层级的模块/实体,例如引擎和轮子。

相较于直接依赖于实体的引擎或轮子,汽车应该依赖于抽象的引擎或轮子的规格,这样只要是符合这个抽象规格的引擎或轮子,都可以装到车里跑。

来看看下面的图:

依赖倒置原则的类层次结构


小卓:注意上面的 Car类,它有两个属性,且都是抽象类型(接口)而非实体的。

引擎和车轮是可插拔的,这样汽车能接受任何实现了声明接口的对象,且 Car 类无需任何改动。

同学:所以,如果代码不遵循依赖倒置,就有下面的风险:

· 使用低层级类会破环高层级代码;

· 当低层级的类变化时,需要太多时间和代价来修改高层级代码;

· 代码可复用性不高


小卓:你说到点子上了!


简单总结一下

小卓:除 SOLID 原则外还有很多别的面向对象原则。比如:


其他面向对象的原则:

· “组合替代继承”:是说“用组合比用继承好”;

· “笛米特法则”:是说“类对其它类知道的越少越好”;

· “共同封闭原则”:是说“相关类应该一起打包”;

· “稳定抽象原则”:这是说"类越稳定,就越应该是抽象类";

同学:我得学习这些原则吗?


小卓:当然了。你可以Google 它,学习它,理解它。有问题就找我。

同学:我听说还有些根据设计原则编写的设计模式。

 

小卓:对的。设计模式不过就是针对一些经常出现的场景的一些通用的设计建议。主要的想法还是面向对象原则。你可以认为设计模式是“框架”,OOD 原则是“规范”。

同学:那么之后我将学习设计模式是吧?

 

小卓:是的。

同学:应该会很有意思。

 

小卓:必须地!



出处:开源中国

译者:K6F, 凡程子, 叫我蝴蝶吧, 王薇, 人头马没面, 铂金小龟, 风子, nikeff1108, sigai

链接:http://www.oschina.net/translate/how-i-explained-ood-to-my-wife?lang=chs&page=4#

了解更多编程知识欢迎访问中软国际教育集团官网

相关阅读

更多

中软卓越java培训地址:北京市海淀区科学院南路2号融科资讯中心C座北楼12层 联系电话:400-666-3775 邮箱账号:etc-marketing@chinasofti.com

©2008-2016 北京中软国际教育科技股份有限公司 京ICP备14058756号-2