依赖反转原则

✍ dations ◷ 2025-07-15 05:46:22 #软件设计模式,软件设计,编程原则,面向对象的程序设计

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

该原则规定:

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

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

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

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

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

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


相关

  • 地心说地心说(或称天动说),是古人认为地球是宇宙的中心,而其他的星球都环绕着地球而运行的学说。由于古代人缺乏足够的宇宙观测数据,以及怀着以人为本的观念,因此他们误认为地球就是宇宙
  • 国家认同国族认同(又称为国家认同、民族认同,又可称为“国家身份”、“民族身份”、“国族身份”)是人对于国家或民族的归属感或认同感。这是种将国族视为一凝聚整体的观念,通常以一个国
  • 居斯塔夫·埃菲尔亚历山大·古斯塔夫·埃菲尔(Alexandre Gustave Eiffel,1832年12月15日-1923年1月27日)祖先来自德国。他是一位法国工程师,金属结构专家,也是一位作家。出生于法国第戎,一开始他想
  • 詹姆斯六世詹姆士一世和六世(英语:James I and James VI,1566年6月19日-1625年3月27日),苏格兰国王,称詹姆士六世(英语:James VI),1567年7月24日到1625年3月27日在位,1603年未婚的英格兰女王伊丽莎
  • 异构化异构化反应也称异构化,指某种化学物质在特定条件下改变自身的组成结构,从而成为新物质的反应。产物通常是反应物的异构体。许多异构体的键能相差不大,因此在常温下可相互转化。
  • 沃茨人沃茨人(沃特语:vađđalaizõd)是居住在英格里亚地区的一个民族。他们使用乌拉尔语系芬兰语支的语言。现在沃茨人的人口数量非常少。而沃茨人的语言沃特语是濒临灭绝的语言。沃
  • 园博园深圳国际园林花卉博览园,简称深圳园博园,是广东省深圳市福田区内的一个公园,东邻竹子林站,近侨城东站。该公园面积66万平方米左右,是一个植物公园、市政公园。在2004年9月23日开
  • 证言法证言法,又称为名人证言法或代言,是一种普遍使用于广告及宣传的手法,让知名公众人物或一般民众利用书面或实际演说的方式,替特定事物证明或背书,借此提高事物的可信度。证言法现在
  • 有机镉化合物有机镉化合物是含有碳-镉键的一类金属有机化合物。格氏试剂和有机锂试剂与卤化镉反应,可以得到二烃基镉,如:炔烃和二甲基镉或二氨基镉反应,可以得到镉的炔基化合物:芳基镉化合物
  • 水源话水源话,又称水源音或东江本地话,是东江流域中上游地区的一个土语群,主要分布于惠州和河源,处于客家语粤中片包围之中(1987年出版的中国语言地图集,把河源水源音归为粤中片,把惠州水