依赖反转原则

✍ dations ◷ 2025-09-17 07:07:24 #软件设计模式,软件设计,编程原则,面向对象的程序设计

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

该原则规定:

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

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

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

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

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

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


相关

  • 胰岛素疗法碳水化合物计数法(Carbohydrate counting,或carb counting)是糖尿病患者制订饮食计划的一种简便、有效的方法,是一种计算一日正餐和点心中的碳水化合物克数或食物份数大小的方法
  • 理发师理发师是一种职业,负责简单的理发。理发师与发型师不同,理发师通常只会帮男士进行简单的修剪头发或剃发,而发型师则会提供发型设计。理发师在中国古代有多种称呼,包括剃工、待诏
  • 多那太罗多那太罗(Donatello,1386年-1466年12月13日,本名Donato di Niccolò di Betto Bardi),也译为多纳泰洛,15世纪意大利佛罗伦萨著名雕刻家,文艺复兴初期写实主义与复兴雕刻的奠基者,对当
  • 精氨基琥珀酸裂合酶精氨基琥珀酸裂解酶(英语:Argininosuccinate lyase,简称ASL),或称精氨酸琥珀酸裂解酶是一种将精氨基琥珀酸分裂成精氨酸及延胡索酸的酶(EC4.3.2.1)。它负责尿素循环中的第4个步骤。
  • 何塞·卡雷拉斯乔塞普·卡雷拉斯(加泰罗尼亚语:Josep Maria Carreras i Coll,发音:,1946年12月5日-),通常被称为何塞·卡雷拉斯(西班牙语:José Carreras),是西班牙歌唱家,20世纪后半叶的世界三大男高
  • 过饱和蒸汽过饱和蒸汽(英文:Supersaturated steam),是指蒸汽超过该温度下的饱和压力,而不发生相变的现象。该蒸汽称为过饱和蒸汽。例如,20°C下的饱和蒸汽压为0.0238 Kg/cm2 ,如果该温度下的
  • 圣若瑟大学圣若瑟大学(葡萄牙语:Universidade de São José,英语:University of Saint Joseph),前称澳门高等校际学院(葡萄牙语:Instituto Inter-Universitário de Macau,英语:Macau Inter-Uni
  • 漳平市坐标:25°17′4″N 117°25′27″E / 25.28444°N 117.42417°E / 25.28444; 117.42417漳平市(闽南语:.mw-parser-output .sans-serif{font-family:-apple-system,BlinkMacSyst
  • 虎航坐标:25°04′06″N 121°13′15″E / 25.0684019°N 121.220824°E / 25.0684019; 121.220824台湾虎航(英语:Tigerair Taiwan ;IATA代码:IT ;ICAO代码:TTW;呼号:Smart Cat;简称台虎)是
  • 长生郡上图中的数字分别是1.一宫町 2.睦沢町 3.长生村 4.白子町 5.长柄町 6.长南町。绿:现在;黄:明治时期;浅绿:后来编入的区域;淡黄:后来归他郡所属的区域长生郡(日语:長生郡/ちょうせいぐ