依赖反转原则

✍ dations ◷ 2025-08-14 10:15:40 #软件设计模式,软件设计,编程原则,面向对象的程序设计

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

该原则规定:

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

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

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

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

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

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


相关

  • 郭子章郭子章(1543年1月29日-1618年8月7日),字相奎,号青螺,别号蠙衣生,江西泰和人,明朝重臣,文武兼资,集政治家、军事家、史学家、地名学家、文学家、医学家等于一身。郭子章出生于泰和县三
  • 攀援始祖兽始祖兽(学名Eomaia)是一种已灭绝的哺乳动物,有可能是真兽下纲的最早祖先。始祖兽的化石是在中国辽宁的义县组发现,可追溯至下白垩纪的巴列姆阶。这个标本长10厘米及差不多完整,估
  • 巨人传《巨人传》(法语:La vie de Gargantua et de Pantagruel),是法国文艺复兴时期的重要文学作品,由法国作家弗朗索瓦·拉伯雷创作,共有五集,1532至1564年陆续出版。此书具体反映出中古
  • 1973年石油危机第一次石油危机从1973年延续至1974年,又称作1973年石油危机,由于1973年10月第四次中东战争爆发,石油输出国组织(OPEC)为了打击对手以色列及支持以色列的国家,宣布石油禁运,暂停出口
  • 质荷比荷质比又称比荷、比电荷,是一个带电粒子所带电荷与其质量之比,其单位为C/kg。计算时,粒子无论带何种电荷,应一律代入正值计算。电子电荷 e
  • 卡宾达省卡宾达省(葡萄牙语:Cabinda)是安哥拉的一块外飞地,两者被刚果民主共和国(旧称扎伊尔)隔开,北接刚果共和国,东边及南边与刚果民主共和国相邻,西面濒临大西洋。1885年柏林会议时,法葡比
  • 防火遮蔽防火遮蔽(英语:fire shelter)是一种安全装置,也是防火的最后手段,森林消防员在野火中受困时可利用此装置来保命。尽管防火遮蔽经受不了长时间与火焰的直接接触,但在草原大火之类的
  • 大石锹次郎大石锹次郎(天保9年(1838年) - 明治3年10月10日(1870年11月3日)),新选组诸士调役兼监察。名守亲。大石为御三卿一桥家近习番众 大石舍次郎的长男。一开始被称为金之助。在进入新撰
  • 7月4日7月4日是阳历年的第185天(闰年是186天),离一年的结束还有180天。
  • 王汶王汶(1433年-1489年),字允达,浙江义乌人。明朝官员。王汶为明初忠臣王祎曾孙。成化十四年(1478年)中式戊戌科进士,授中书舍人。谢病而归,在齐山下读书。弘治初年,经言官交相推荐,王汶与