依赖反转原则

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

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

该原则规定:

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

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

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

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

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

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


相关

  • 地球大气层地球大气层,又称大气圈,因重力关系而围绕着地球的一层混合气体,是地球最外部的气体圈层,包围着海洋和陆地,大气圈没有确切的上界,在离地表2000-16000公里高空仍有稀薄的气体和基本
  • 食物盲从现象食物盲从现象(fad diets)指某些与食物有关的健康(包括节食减肥)资讯,在未受科学证实之下,借由似是而非的伪科学论点在社会中快速传播,有时夹杂玄学宗教论点,导致大量民众盲目跟
  • 畸颚马陆总目(Colobognatha)见内文畸颚马陆总目(学名:Colobognatha)是倍足纲唇颚亚纲蠕形马陆下纲(Helminthomorpha)之下的一个总目。畸颚马陆总目的各物种间都有共有衍征:雄性物种有两对简单的生殖肢(英语:gon
  • 澳大利亚民主党澳大利亚民主党(Australian Democrats)是澳大利亚的政党。澳大利亚民主党1977年建党,由原有的两个小党合并,加上部分从日趋保守主义的澳大利亚自由党退党的倾向于古典自由主义的
  • 三乘菩提三乘菩提,佛教术语,菩提(梵文:बोधि bodhi),是指“觉悟”的意思”,三乘是将佛教修行的法道的总体大纲分成三种:大乘佛菩提道、中乘缘觉菩提、小乘声闻菩提(缘觉菩提与声闻菩提合
  • 松本刚明松本刚明(1959年4月25日-)日本政治家。日本自由民主党所属众议院议员(6期)。前任外务大臣(第145代)。松本刚明出身政治世家,他是日本初代内阁总理大臣伊藤博文的外玄孙。父亲松本十
  • Physical Review Letters《物理评论快报》(英语:Physical Review Letters ,简称PRL),也译作物理报导期刊、物理评论快讯,是一本声誉卓著的物理学期刊,自1958年起开始由美国物理学会出版。该刊是从物理评论
  • span style=color: white釜日电影奖/span釜日电影奖(朝鲜语:부일영화상/釜日映畵賞 Bu'il Yeonghwasang;英语:The Buil Film Awards)又称釜日电影节,成立于1958年,1973年举办了16届之后在电视的普及之下被迫停止,2008年中断
  • 唐家璇唐家璇(1938年1月17日-),江苏镇江人,北京大学日语专业毕业;中国职业外交官。1973年11月加入中国共产党,是中国共产党第十五、十六届中央委员。曾任中华人民共和国国务委员、外交部
  • 常来人常来人或生理人(他加禄语:Sangley;闽南语:.mw-parser-output .sans-serif{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Lato,"Helvetica Neue",Helvetica,