依赖反转原则

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

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

该原则规定:

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

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

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

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

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

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


相关

  • 祖鲁语祖鲁语(祖鲁语:isiZulu)是祖鲁人所使用的一种语言。目前大约有九百万人使用,其中95%居住在南非共和国境内。祖鲁语是24%的南非人的母语,也是南非最大的语言。大约50%的南非人可以
  • 质量投射器质量投射器,亦称质量加速器(Mass Driver),是一种利用电磁加速工具,基本原理是利用反复改变的电磁场来让磁化了的物体加速并投射出去。原理和磁浮列车以及磁道炮(电磁炮)相类似。质
  • 哥特式哥特式艺术,又译作哥德式艺术(法语:Art gothique),为一种源自法国的艺术风格,该风格始于12世纪的法国,盛行于13世纪,至14世纪末期,其风格逐渐大众化和自然化,形成国际哥特风格,直至15世
  • 初等教育初等教育(英语:Primary education,或者英语:Elementary education)一般而言系指第一阶段的义务教育,界于学前教育与中等教育间,初等教育通常在小学或国民小学进行。在一些国家中,初
  • 卡宾达省卡宾达省(葡萄牙语:Cabinda)是安哥拉的一块外飞地,两者被刚果民主共和国(旧称扎伊尔)隔开,北接刚果共和国,东边及南边与刚果民主共和国相邻,西面濒临大西洋。1885年柏林会议时,法葡比
  • 菠萝菠萝(马新称黄梨,港澳称菠萝,台湾称凤梨)(学名:Ananas comosus)是原产于南美洲巴西、巴拉圭的亚马逊河流域一带的热带水果,现在已于热带地区广泛种植。因多汁酸甜受到喜爱,有解暑之效
  • 磷酸脲磷酸脲,化学式CO(NH2)2·H3PO4。磷酸脲是一种无色透明棱柱状结晶,易溶于水,水溶液呈酸性,1%水溶液的pH为1.89;不溶于醚类、甲苯、四氯化碳和二
  • 藩国藩是东亚封建制度的地方分权概念,在古代的中国和日本形成了各种与领土分封治理有关的制度或名称,包括:
  • 粤中片粤中客语,或称客家语粤中片,是汉语族客家语的一个支系,主要分布在中国广东省的东江中上游流域。中国社科院和澳大利亚人文科学院合编的1987年版《中国语言地图集》将中国客家语
  • 辽太宗大契丹国皇帝:927年12月11日—947年 2月24日 大辽皇帝:947年2月24日—947年5月15日 辽太宗耶律德光(902年11月25日-947年5月15日),大契丹国第二位皇帝(927年12月11日至947年5月15日