依赖反转原则

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

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

该原则规定:

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

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

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

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

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

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


相关

  • 灰狼狼(学名:Canis lupus),或称为灰狼,哺乳纲,犬科,在生物学上与狗为同一物种,为现生犬科动物中体型最大的物种。狼这个物种曾是地球上分布地区最广的哺乳动物,包括北美和欧亚大陆,但如今
  • Baird规则Baird规则是有机化学的经验规则。它是指当闭合环状三重态平面型的共轭多烯(轮烯)π电子数为4n时,具有芳香性。
  • 现金现金,在经济学范畴指实体纸币和硬币。在金融范畴指可流动形式的货币,如纸币或硬币。相较其他形式的有价物品如贵金属、票据、债券等,于借贷相区别。现金是较直接方便流通的物品
  • 佛祖佛祖可以指:
  • 季节性抑郁障碍季节性抑郁症(英文:Seasonal Affective Disorder,或SAD,以下简称SAD)也叫做“冬季忧郁症”(英语:Winter depression),是一种感情的,或者情绪的失调。大多数的SAD患者在一年的大部分时
  • 雅典宪章《雅典宪章》(法语:Charte d'Athènes),是法国-瑞士知名建筑师勒·柯布西耶于1933年提出,并在1943年正式出版的一份有关于城市规划的文件。该宪章是基于勒·柯布西耶的1935年出版
  • 食品添加物食品添加剂是为了保持味道或增强口感、改善外观添加到食物中的物质。 一些添加剂已经使用了几个世纪;例如,(用醋)腌制、盐腌来保存食物(如腌肉),糖果的保存以及用二氧化硫来保存葡
  • 乌尔米耶乌尔米耶或乌鲁米耶(阿塞拜疆语:اورمو;波斯语:ارومیه;阿拉米语:ܐܘܪܡܝܐ;库尔德语:ورمێ;亚美尼亚语:Ուրմիա )是伊朗伊斯兰共和国西阿塞拜疆省的省会和最大城
  • 非凡商业台非凡商业台,是非凡电视旗下的频道之一。2019年7月22日起,启用高清版本“非凡商业台HD”。
  • 弗拉基米尔·科马洛夫弗拉基米尔·米哈伊洛维奇·科马罗夫(俄语:Владимир Михайлович Комаров,1927年3月16日-1967年4月24日)是一名前苏联宇航员。他是史上第一位因载人航天