依赖反转原则

✍ dations ◷ 2025-11-14 01:44:09 #软件设计模式,软件设计,编程原则,面向对象的程序设计

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

该原则规定:

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

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

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

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

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

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


相关

  • 白俄罗斯欧洲(深灰色)  —白俄罗斯共和国(白俄罗斯语:Беларусь,转写:Biełaruś;IPA:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI
  • 威廉·约翰·麦夸恩·兰金威廉·约翰·麦夸恩·兰金(英语:William John Macquorn Rankine,1820年7月5日-1872年12月24日)是苏格兰土木工程师,物理学家和数学家。他与开尔文一起是热力学第一定律的提出者之
  • 茎环茎环(英语:Stem-loop,或译主干-循环)指一种分子内碱基配对方式,与因此形成的结构,可发生于单股DNA,但在RNA分子中较为常见。当形成的循环较小时,也称为发夹(hairpin)或发夹环。此种结
  • 张裕恒张裕恒(1938年2月28日-),物理学家。中国科学技术大学教授。生于江苏宿迁。1961年毕业于南京大学物理系,1965年中国科学院物理研究所研究生毕业。
  • 南丹麦大区南丹麦大区 (Region Syddanmark)是丹麦五大区之一,2007年1月1日由原来的菲英郡、里伯郡、南日德兰郡和瓦埃勒郡的十个市合并而成。下分22市。面积12,191平方公里(半岛部分8705k
  • 获执政权直皖战争,发生于1920年7月14日,是直系曹锟与皖系段祺瑞为争夺北京政府统治权,在京津地区的对抗。当时曹锟为地方军区负责人,段祺瑞为民国政府“边防督办”,从法律上来说,直皖战争
  • 反共产国际协定反共产国际协定 (又称防共协定,德语:Antikominternpakt,日语:防共協定)是纳粹德国与大日本帝国在1936年11月25日签订的反对共产国际及苏联的协定。此协定后来陆续有其他国家加入。
  • 鹅喉羚鹅喉羚,又名羚羊,黄羊,或长尾黄羊,是一种典型的荒漠、半荒漠动物。鹅喉羚是中等体型的动物,体长约1~1.2米,肩高70多厘米,尾长15~18厘米;成羊体重约20--40公斤;颈细长,尾短,四肢细长有力。
  • 生命力论生命力论(英语:Vitalism,又译为生命主义、生气论、生机论、生机说、生命力)在人类历史上存在长久的历史,现代版本是19世纪初由瑞典化学家贝采利乌斯提出。一般认为“生命力”学说
  • 王薇薇王薇薇(英语:Vera Wang;1949年6月27日-)是美国一名时尚设计师,主要活跃在纽约市。王薇薇出生于美国纽约市的一个华裔家庭,并在纽约市长大;她出生时所使用的英文名为Vera Ellen Wang