依赖反转原则

✍ dations ◷ 2024-09-20 08:43:03 #软件设计模式,软件设计,编程原则,面向对象的程序设计

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

该原则规定:

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

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

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

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

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

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


相关

  • 深南部深南部(Deep South 或 Lower South),又称为棉花州(Cotton States),也常被译为南方腹地,是美国南部的文化与地理区域名称,与“上南方”(Upper South)相对。深南部并没有统一的定义,一般
  • 赫克理查德·弗雷德·赫克(英语:Richard Fred Heck,1931年8月15日-2015年10月10日),美国化学家,因在“有机合成中的钯催化交叉偶联反应”方面做出贡献而与根岸英一、铃木章共同获2010年
  • 巴黎市政厅巴黎市政厅(法语:Hôtel de Ville)是法国巴黎自1357年以来的市政厅所在地,位于第四区的市政厅广场(在1802年以前名为“格列夫广场”,Place de Grève,意为河滩广场)。它具有多种功能
  • 马其顿代纳尔北马其顿代纳尔 (马其顿语: денар and денари,也译作德纳尔、第纳尔),货币编码MKD。是北马其顿共和国的流通货币。辅币单位德尼。1代纳尔=100德尼。
  • 陶一世塞纳赫特里·雅赫摩斯是古埃及第二中间期,第十七王朝的第七位法老。塞纳赫特里在希克索斯第十五王朝统治下埃及时,统治了上埃及底比斯区域。他至少于公元前1560或1558年驾崩。
  • 塔斯马尼亚岛坐标:42°10′46.88″S 146°38′43.83″E / 42.1796889°S 146.6455083°E / -42.1796889; 146.6455083塔斯马尼亚州(英语:Tasmania,缩写为TAS),简称塔州,是澳大利亚唯一的岛州,原
  • 中正国防干部预备学校中正国防干部预备学校,简称中正预校,为一所位于中华民国高雄市凤山区的高级中等学校,隶属国防部。作为培育未来预备军官之学校,具有预科的性质。中正预校前身为中华民国陆军预备
  • 地球高峰会地球高峰会(英语:Earth Summit),又称联合国环境与发展会议(英语:The United Nations Conference on Environment and Development,简称UNCED)、里约热内卢高峰会,是联合国重要会议之
  • 1492年重要事件重要人物
  • 台中市台中市文化资产是台中市文化资产处与文化部文化资产局依《文化资产保存法》里的九类有形文化资产(古迹、历史建筑、纪念建筑、聚落建筑群、考古遗址、史迹、文化景观、古物〈