依赖反转原则

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

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

该原则规定:

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

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

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

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

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

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


相关

  • 掌控可忽略衰老掌控可忽略衰老(Engineered negligible senescence 或 Strategies for Engineered Negligible Senescence,SENS)乃是一种建议中的医疗科技策略,透过医疗工程预防并把衰老或受损
  • 曼恩·德比朗曼恩·德·比朗(Maine de Biran,1766年11月29日-1824年7月20?日)为法国哲学家。德·比朗起初为感觉论者,像孔狄亚克和洛克那样;他后来转向理智主义,最终成为神秘主义的神智论者。德
  • 工作犬工作犬是指从事各项工作以协助其人类伙伴的狗,与展览犬以外表特征等作为评选标准相比较,工作犬重视犬种原本发展的功能性质,例如边境牧羊犬重视协助牧羊的实际能力,而非其外型。
  • 甘草汤甘草汤,出自《伤寒杂病论》,又名温液汤。少阴病咽痛或肺痿,涎唾多。
  • .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:
  • 玛尔汉玛尔汉,又译马尔汉(1634年-1718年),兆佳氏,满洲正白旗人,清朝政治人物、清朝兵部尚书。顺治十一年(1654年),翻译举人。授工部七品笔帖式,累迁刑部员外郎。康熙十三年(1674年),署骁骑参领随
  • 国家工商行政管理局1999年规定:印章直径5厘米,中央刊国徽,由国务院制发。中国工商行政管理标识国家工商总局原址现为国家市场监督管理总局中华民国:公平交易委员会、行政院消保处、经济部智慧财产
  • 圈养圈养就是将动物围在固定的场所人工饲养,它是与天然放牧相对的。圈养在世界上已经存在很长时间,其主要是在禽畜养殖方面,被大量地使用。
  • ATC代码 (R)ATC代码R(呼吸系统)是解剖学治疗学及化学分类系统的一个分类,这是由世界卫生组织药物统计方法整合中心(The WHO Collaborating Centre for Drug Statistics Methodology)所制定的
  • 盐酸丁二胍丁二胍,又名丁双胍,药品名丁福明,是一种口服降血糖药,于1957年被合成,主要用于二型糖尿病的治疗,与二甲双胍、苯乙双胍同属于双胍类口服降血糖药。盐酸丁二胍是白色或黄色,无味,晶体