依赖倒置原则丨组装汽车的例子
作者: 来源: 时间: 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