依赖反转原则

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

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

该原则规定:

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

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

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

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

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

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


相关

  • 保丽龙盒发泡胶盒是一种容器,又被称为食物盒及饭盒等。因为性质隔热,所以有一定的保温功能,常用于盛载食物,例如午餐便当等。此胶盒在工厂由发泡胶胶粒加热注塑成型,尺寸可塑性高。在日常
  • 可能世界可能世界(英语:Possible world)的概念被用来在哲学和逻辑中,表达模态断言。在哲学中,术语“模态”覆盖了如“可能性”“必然性”“偶然性”这类观念。谈论可能世界在当代哲学讨论
  • 政治生态学生态政治学又称生态政经学或生态政治经济学(英文:Political ecology),其在本质上与政治生态学或称政治生态(Ecological Politics)有很大的差异。 前者以环境与生态为主要的对象,
  • 哈里·哈洛哈利·哈洛(英语:Harry F. Harlow,1905年10月31日-1981年12月6日),美国心理学家,早期研究灵长类动物的问题解决和辨别反应学习,其后用学习定势的训练方法比较灵长类和其他动物的智力
  • Pu钚的同位素备注:画上#号的数据代表没有经过实验的证明,只是理论推测而已,而用括号括起来的代表数据不确定性。
  • 放电静电放电,是指在某一绝缘介质的两面分别出现正电荷和负电荷,并且逐渐累积时,这时加于该绝缘介质上的电压也会同时增加,当该电压高于一定程度(击穿电压)后,这时绝缘介质会发生电击穿
  • 叔父叔父,又称叔叔、阿叔,简称作叔,是中文中亲属关系的称谓,指父亲的弟弟,带血缘关系。相反情况下对方则称呼自己作侄子或侄女。要注意的是,“叔”有时是指小叔(或作小叔子、叔仔),即丈夫
  • 球囊半规管(semicircular canals)是脊椎动物内耳迷路中掌管平衡感的器官,同样是维持平衡和与控制生物体姿势的一内耳感受装置,包括球囊(saccule)、椭圆囊(utricle)和半规管(semicircular
  • 杨丽萍杨丽萍(1958年11月10日-),女,白族,云南洱源人,中国舞蹈艺术家,一级演员,中国舞蹈家协会副主席。1986年创作并表演独舞《雀之灵》,借此一举成名。1992年成为中国大陆第一位赴台湾表演的
  • 杀戮一代《杀戮一代》(英语:Generation Kill)是一部由美国HBO电视网制作的电视连续短剧。该剧改编自《滚石》杂志随军记者埃文·莱特(Evan Wright)所撰写的同名小说,一共有七集,于2008年7月