依赖反转原则

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

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

该原则规定:

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

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

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

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

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

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


相关

  • 四川方言字四川方言字,泛指用于书写四川话的汉字,通常采用形声、会意等手段来纪录四川话中不见于现代标准汉语的特有词汇。四川方言字部分为采用形声、会意等手段创造的新造字,例如“㧯”
  • 分枝杆菌科分枝杆菌属(Mycobacterium)为放线菌门下的一个属,且为分枝杆菌科唯一的属。该属细菌包括许多已知在哺乳类动物中造成严重疾病的病原菌,包括结核杆菌(Mycobacterium tuberculosis)
  • 谢在库谢在库(1963年9月-),辽宁普兰店人,出生于新金县,中国石油化工专家,中国石油化工股份有限公司教授级高级工程师。2017年当选为中国科学院院士。1985年毕业于抚顺石油学院,2000年在华
  • 大屠杀列表本列表按照发生年代的先后顺序列举世界历史上发生的大屠杀。
  • 耐克森轮胎耐克森轮胎有限公司(韩语:넥센타이어,英语:Nexen Tire Corporation)为韩国三大轮胎制造商之一,1942年于庆尚南道梁山市成立。耐克森轮胎于1956年8月起开始生产汽车辐射层轮胎,为韩
  • 詹姆士·堤尔詹姆斯·埃德加·蒂尔(英语:James Edgar Till,1931年8月25日-),加拿大生物物理学家、干细胞和癌症研究人员、多伦多大学前教授。出生在萨斯喀彻温省明斯特),蒂尔率先研究了各种哺乳
  • 查尔斯顿港查尔斯顿(英语:Charleston)是位于美国南卡罗来纳州伯克利县和查尔斯顿县的一座城市,也是查尔斯顿县的县治所在。查尔斯顿始建于1670年,到1800年,它成为当时仅次于费城、纽约、波士
  • 阿波罗14号阿波罗14号(Apollo 14)是美国国家航空航天局的阿波罗计划中的第八次载人任务,是人类第三次成功登月的载人登月任务。替补成员同样接受任务训练,在主力成员因各种原因无法执行任
  • 美国第四大电视网美国第四大电视网是指美国除了传统的三大电视网ABC、CBS、NBC之外的电视网。除了三大电视网之外,美国也曾有过杜蒙特电视网(DuMont Television Network)。但由于财政不稳,杜蒙特
  • 奥斯塔欧洲螯虾奥斯塔欧洲螯虾(学名Astacus astacus),又名北欧螯虾,是欧洲的一种螯虾。它们只限于淡水环境,包括泉、河流及湖泊。它们分布在由法国经中欧至巴尔干半岛,北至不列颠群岛、斯堪的纳