面向对象之依赖反转原则

传统依赖模式
依赖反转下的模式

面向对象编程 领域中, 依赖反转原则(Dependency inversion principle,DIP)是指一种特定的解耦形式,使得高层次的模块不依赖于低层次的模块的实现细节,依赖关系被颠倒(反转),从而是的低层次模块依赖于高层次模块的需求抽象。

该原则规定:

  1. 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口
  2. 抽象接口不应该依赖于具体实现。而具体实现则应该依赖于抽象接口

该原则颠倒了一部分人对于面向对象设计的认识方式。如高层次和低层次对象都应该依赖相同的抽象接口。

对该模式的理解举例子(纯属瞎掰):
扯犊子故事一:

女神小雅,买了人生第一台小米手机,非常开心。花了一天时间设置了家人生日闹钟的提醒,又花了一天时间下载各种喜欢玩的游戏和喜欢看的动漫视频,又花了一天把学习资料都整理到手机上方便学习。


开心

就这样,小雅开心的度过了一个月。
天有不测风云,有一天小雅运动的手机掉了。好在小雅生活在一个富裕的家庭,爸妈很快就给小雅新购一个新的 Apple 手机。可是小雅还是非常难过,因为拿到新手机,她又需要花费将近三天来配置自己的新手机,其中的繁琐让小雅感到恐怖。

难过

美女有困难时,万能的我出现了。为了一劳永逸的解决小雅的问题,我将小雅设置家人生日、下载喜欢游戏和喜欢动漫视频、整理学习资料传到手机这些操作封装成一个代理,这是小雅的一个专属私人代理。小雅以后只需要告诉代理她需要玩游戏,代理就会找到一部安装小雅喜欢的游戏的手机给她玩,小雅需要看动漫,代理就会找到一个部有小雅喜欢动漫的手机给她看。小雅从此不用关心是哪部手机,只需要找到她的代理,告诉代理她需要代理里面的哪些服务就行了,而手机随时可以被替换。小雅摆脱了如此大的困境,非常激动,询问我的尊姓大名。我默默一笑,嘴角微微上扬,告诉她,我就是传说中的 依赖反转原则,让小雅摆脱对手机的依赖。

扯犊子故事二:

传统依赖模式下,苹果生产手机需要使用到各个合作厂商合作,其中 CPU 部分,苹果将三星作为子类,持有它。当CPU 要进行加工的时候,就通过三星这个子类进行加工。


在两家公司合作时间久了之后,苹果发现三星加工 CPU 价格较高,苹果像换具有同样加工 CPU 业务的台积电来为自己加工。苹果不得不更改自己的代码,将持有的三星子类替换成台积电子类,可是换产商需要磨合各种步骤,这其中的辛苦可不容易了。另外苹果生产一台手机的所需要别人加工的零部件很多,如果每次更换合作厂商都需要调整自己的代码,就会非常麻烦,而且容易出错。


这时候,依赖反转原则点了点苹果的后脑勺,苹果灵光一闪。应用依赖反转原则,苹果出台了一套协议,说出自己对 CPU 加工的要求,这时候苹果持有了这个协议。需要和苹果合作,想为苹果加工 CPU 的厂商遵守苹果定制的协议。这样,苹果更换厂商的时候轻松多了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。