依赖反转原则

✍ dations ◷ 2025-10-11 15:23:06 #软件设计模式,软件设计,编程原则,面向对象的程序设计

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

该原则规定:

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

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

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

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

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

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


相关

  • .mw-parser-output ruby.zy{text-align:justify;text-justify:none}.mw-parser-output ruby.zy>rp{user-select:none}.mw-parser-output ruby.zy>rt{font-feature-settings:
  • 哈米吉多顿哈米吉多顿(新教和合本译,英语:Armageddon,古希腊语:Ἃρ Μαγεδών Har Magedón,希伯来语:.mw-parser-output .script-hebrew,.mw-parser-output .script-Hebr{font-size:1.
  • 天狼星天狼星(Bd:α CMa)是夜空中最亮的恒星,其视星等为-1.46,几乎为第二亮恒星老人星的两倍。它的英文名称为Sirius,读法为/sɪɹiəs/,源自古希腊语的Σείριος。天狼星根据拜耳命
  • 模拟信号模拟信号(英语:Analog Signal)是指在时域上数学形式为连续函数的信号。与模拟信号对应的是数字信号,后者采取分立的逻辑值,而前者可以获取连续值。模拟信号的概念常常在涉及电的
  • 杰西·罗布雷多杰西·罗布雷多(Jesse Manalastas Robredo,1958年5月27日-2012年8月18日),中文姓名林炳智,第二代菲律宾华人,由2010年起担任菲律宾贝尼格诺·亚基诺三世政府内政部长,直至逝世。2012
  • 牙形石牙形石(Conodont)又称牙形刺,旧称牙形虫、牙形类、锥齿、锥齿类。是一类早已灭绝的海生的、游泳的、两侧对称的、相对原始的脊椎动物头部的微体骨骼化石。外部形态可分三大类:单
  • 新店客运新店客运股份有限公司(英语:Xindian Bus Co., Ltd.),简称新店客运,主要经营新北市公车、台北市联营公车,公司总部设在新北市新店区。【行经: 捷运新店站(北新路)、 捷运公馆站、国立
  • 古德里安海因茨·威廉·古德里安(德语:Heinz Wilhelm Guderian,1888年6月17日-1954年5月14日)也译古德林,是第二次世界大战一位著名的德国陆军将领,最高军衔为一級上將。古德里安为第二次世
  • 南陈陈(557年-589年)是中国历史上南北朝时期南朝最后一个朝代,由陈霸先代梁所建立,以建康(今南京)为首都,国号陈。陈朝名称来自陈霸先即位前被封的陈公、陈王,但陈王的封号来源又有二说,一
  • 为公众利益为公众利益(拉丁语:pro bono publico,英语:for the public good、常常缩写为“pro bono”;公益服务)是拉丁语短语,指的是志愿提供专业服务,不收取任何报酬。和传统意义上的志愿服务