依赖反转原则

✍ dations ◷ 2025-12-08 21:57:43 #软件设计模式,软件设计,编程原则,面向对象的程序设计

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

该原则规定:

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

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

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

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

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

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


相关

  • 抑菌药抑菌药(英语:bacteriostatic agent/drug)是指具有抑制细菌繁殖药效的抗菌药物。与抑菌药相对的一个概念是杀菌药,即能起杀灭细菌作用的抗菌药物。不过抑菌药与杀菌药并非严格对
  • 费奥多西亚费奥多西亚(英语:Feodossia;俄语:Феодо́сия,Feodosiya;克里米亚鞑靼语和土耳其语:Kefe),古称卡法(Kaffa),是位于黑海北岸克里米亚半岛的城市。在20世纪中期,苏联统治下的费奥多
  • 圣罗莎圣罗莎(英语:Santa Rosa)是美国加利福尼亚州索诺马县的一个市,也是该县的首府。市政府建制于1868年3月26日,面积104.6平方公里,根据2010年美国人口普查共住有人口16万7815人。圣罗
  • 高氯酸盐高氯酸盐是高氯酸形成的盐类,含有四面体型的高氯酸根离子—ClO4−,其中氯的氧化态为+7。高氯酸盐存在于自然界中,主要用作火箭燃料和烟火中的氧化剂和安全气囊中的爆炸物。多数
  • 城镇等级城镇等级(英语:urban hierarchy,或称为城市等级)是根据国家定义的统计上的城镇区域内的人口规模,对各个城镇进行的等级排布。由于城镇人口取决于政府对都市圈的定义,因此城镇等级
  • 美国电影学会美国电影学会(英语:American Film Institute,简称AFI)成立于1967年,是美国国家艺术基金会创建的独立运作的非营利组织。1965年,美国总统林登·约翰逊发出派令,指定设立一个全国性的
  • 昼夜围攻中华民国大日本帝国日方资料: 19,380人伤亡衡阳保卫战是发生在1944年6月22日到1944年8月8日之间中国抗日战争后期最惨烈的一场城市争夺战。衡阳保卫战是中国抗战史上最成功的
  • 冲击石英冲击石英,或称为撞击石英、受震石英(Shocked quartz),是一种微结构和一般石英不同的石英,只在极高压和有限温度下形成。这种石英的结晶结构是随着结晶内的平面变形。这些在显微镜
  • 斑林狸(P. pardicolor)斑林狸(学名:Prionodon pardicolor),又名斑灵狸或东方蓑猫,属林狸科林狸属,是生活在喜玛拉雅山中部及东部的食肉目猫型亚目动物。它们身体短小,呈浅色,头部尖长,四肢细小。由于它们会
  • 玛嬉喜舞玛嬉喜舞(Maxixe,又译又译玛茜茜舞或马克西克斯舞),有时候也称为巴西探戈(Brazilian Tango), 1870年左右在巴西逐渐形成的一种舞厅舞。第一次世界大战前风靡全球。这是一种哈巴涅拉