依赖反转原则

✍ dations ◷ 2025-09-08 13:16:54 #软件设计模式,软件设计,编程原则,面向对象的程序设计

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

该原则规定:

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

在传统的应用架构中,低层次的组件设计用于被高层次的组件使用,这一点提供了逐步的构建一个复杂系统的可能。在这种结构下,高层次的组件直接依赖于低层次的组件去实现一些任务。这种对于低层次组件的依赖限制了高层次组件被重用的可行性。

依赖反转原则的目的是把高层次组件从对低层次组件的依赖中解耦出来,这样使得重用不同层级的组件实现变得可能。把高层组件和低层组件划分到不同的包/库(在这些包/库中拥有定义了高层组件所必须的行为和服务的接口,并且存在高层组件的包)中的方式促进了这种解耦。由于低层组件是对高层组件接口的具体实现,因此低层组件包的编译是依赖于高层组件的,这颠倒了传统的依赖关系。众多的设计模式,比如插件,服务定位器或者依赖反转,则被用来在运行时把指定的低层组件实现提供给高层组件。

应用依赖反转原则同样被认为是应用了适配器模式,例如:高层的类定义了它自己的适配器接口(高层类所依赖的抽象接口)。被适配的对象同样依赖于适配器接口的抽象(这是当然的,因为它实现了这个接口),同时它的实现则可以使用它自身所在低层模块的代码。通过这种方式,高层组件则不依赖于低层组件,因为它(高层组件)仅间接的通过调用适配器接口多态方法使用了低层组件,而这些多态方法则是由被适配对象以及它的低层模块所实现的。

另一个例子是台灯和按钮的例子。

依赖反转原则由罗伯特·C·马丁(英语:Robert Cecil Martin)提出,并且在数篇公开著作中被表述,包括论文《面向对象设计质量标准:对于依赖的分析》,以及一篇1996年出现在C++报道中的名为《依赖反转原则》的文章,和《敏捷软件开发,原则,模式和实践》,《C#中的敏捷原则,模式和实践》两本书。


相关

  • 乙型肝炎乙型肝炎疫苗(Hepatitis B vaccine),常简称乙肝疫苗。是用来预防乙型肝炎的疫苗。第一剂建议于出生后的24小时内就注射,要视情况决定之后还须追加第二或第三剂。这包括免疫功能
  • 通榆通榆县位于中国吉林省西北部,是白城市下辖的一个县。清光绪三十年(1904年)九月初四日,设立开通县,隶属盛京将军洮南府;1915年11月1日,设立瞻榆县,隶属奉天省洮昌道。1958年10月16日,
  • OCLC联机计算机图书馆中心(OCLC,全称:Online Computer Library Center,或译在线电脑图书馆中心、在线计算机图书馆中心)创建于1967年,最初名为俄亥俄学院图书馆中心(Ohio College Libra
  • 生鱼鳢科,又称生鱼或鮕鲐,是辐鳍鱼纲攀鲈目鳢亚目的一个科,其下有三个属。
  • 阿马里洛阿马里洛 (Amarillo),美国德克萨斯州西北部北部狭地的一个城市。是波特县县治,部分伸入兰德尔县。面积233.9平方公里,2006年人口为185,525人。1887年开埠,原名奥奈达(Oneida)。后来
  • 中央法院朝鲜民主主义人民共和国主题朝鲜民主主义人民共和国中央裁判所(朝鲜语:조선민주주의인민공화국 중앙재판소)是朝鲜民主主义人民共和国的最高法院,也是朝鲜司法机构(英语:judiciary
  • 临淄临淄区位于中华人民共和国山东省中部,是淄博市一个石油化工产业密集的市辖区。在古代曾为西周、春秋、战国时的大国齐国国都,1994年被国务院定为国家历史文化名城。临淄,古称营
  • 圣巴巴拉 (加利福尼亚州)圣巴巴拉(Santa Barbara,又译为圣芭芭拉、圣塔芭芭拉)是美国加利福尼亚州圣巴巴拉县太平洋沿岸的一座城市,也是圣巴巴拉县的县治所在。根据美国人口调查局2010年统计,人口有8万84
  • 电子回路电子回路(英语:Electrical network),是由电气设备和元器件,按一定方式连接起来,为电荷流通提供了路径的总体,也叫电子线路或称电气回路,简称网络或回路。如电源、电阻、电容、电感、
  • 业余无线电频率划分业余无线电频率划分由国家电信主管部门完成。在全球范围内,国际电信联盟(ITU)监督为业余无线电传输预留多少无线电频谱。 个别业余电台可在授权频率范围内自由使用任何频率; 授