依赖反转原则

✍ dations ◷ 2025-12-09 23:49:55 #软件设计模式,软件设计,编程原则,面向对象的程序设计

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

该原则规定:

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

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

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

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

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

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


相关

  • 所见即所得所见即所得(英语:What You See Is What You Get,缩写:WYSIWYG)是由菲利普·威尔逊(Flip Wilson)所提出的一种电脑文本编辑器方面的技术,使得编辑文字时在屏幕上直接呈现最终显示效果
  • 植被植被是地球表面所覆盖的植物的总称。它是一个植物学、生态学、农学和地球科学的名词。植被可以因为生长环境的不同而被分类,譬如高山植被、草原植被、海岛植被等。环境因素如
  • 阿齐沙坦阿齐沙坦(又称阿齐沙坦酯,英语:Azilsartan)(INN) 是一款正处于研发中的治疗高血压症的血管紧张素II受体拮抗剂药物,多用于治疗高血压症,也是目前唯一处于末期临床的血管紧张素II受体
  • 巯基硫醇或巯(Thiol)是包含巯基官能团(-SH)的一类非芳香化合物,是一类有机硫化合物。可以看成醇中的氧原子被硫原子替换。硫醇中,硫原子为不等性sp3杂化态,两个单电子占据的sp3杂化轨
  • 外阴切除术外阴切除术,指将外阴全部或部分切除的妇科手术。该手术是如下病症的最后治疗手段:外阴癌 、外阴发育异常、外阴上皮内瘤变 、人类乳突病毒感染等。子宫腔(英语:uterine cavity):宫
  • GPA成绩泛指工作或学习中获得的成功、成果。成绩被量化后可以广泛应用于生活中。在教育领域,老师用成绩来衡量学生在一定时期内的学习状况。这个意义上的成绩概念,最早是由一位名
  • 贝辛斯托克坐标:51°16′00″N 1°05′15″W / 51.2667°N 1.0876°W / 51.2667; -1.0876贝辛斯托克(英语:Basingstoke /ˈbeɪzɪŋstoʊk/ BAY-zing-stohk),英国英格兰汉普郡东北部的集镇
  • 希伦二世希伦二世 (希腊语:Ἱέρων Β΄; 前307年 – 前215年),是西西里的希腊人。伊庇鲁斯联军统帅皮洛士远征西西里迦太基人时,担任他的部将。随着皮洛士离开西西里返国,希伦被叙拉古
  • 何木火何木火(1958年-)字世怀,号水墨行者,台湾台中市大里区人,是国内外知名国画大师。其三叔何金旺在日治时代是其村内有名的肖像画家,何木火在他教导下展现绘画天分。他曾计划于国中毕业
  • 溶胶溶胶(sol)又称胶体溶液,是在分散体系中保持固体物质不沉淀的胶体。不断深入的研究表明,溶胶不是一种物质而是一种“状态”。此概念常与“凝胶”相对(参见溶胶凝胶)。溶胶的分散介