依赖反转原则

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

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

该原则规定:

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

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

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

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

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

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


相关

  • 告示牌《公告牌》(英语:Billboard,形象化为billboard)杂志,是一个美国娱乐杂志和媒体品牌,由埃德里奇工业(英语:Eldridge Industries)旗下的公告牌-好莱坞报道传媒集团(Billboard-Hollywood
  • 少数民族少数民族,是实行主体民族与少数民族区别对待政策的国家的差别用语,是民族主义国家中主体民族以外的民族群体,人口比例占少数。少数民族可以是原住民族,也可以是外来民族,来源真实
  • ddCTP双脱氧核苷酸(英语:Dideoxynucleotide)是DNA聚合酶的链终止性抑制剂,应用于DNA测序桑格法。这些核苷酸亦被称为2',3'-双脱氧核苷酸,常被简写为ddNTPs(ddGTP、ddATP、ddTTP与ddCTP)
  • 壁虎壁虎,又称守宫、檐龙(潮汕人有时会误写为同音的“钱龙”二字)、檐蛇(粤语)、蝎虎子、四脚蛇或
  • 墨尔本公园坐标:37°49′22″S 144°58′48″E / 37.82267°S 144.98005°E / -37.82267; 144.98005墨尔本公园(Melbourne Park)位于澳洲维多利亚州墨尔本的墨尔本运动和娱乐区(Melbourne
  • 1585年商朝第二任君主外丙继位。埃及人发明的一种全新的历法,该历法来源于月亮和星星。该历法比巴比伦历法要先进。
  • 吴越吴越可能指:
  • 罗斯维尔市罗斯维尔(英语:Roswell)是美国新墨西哥州东南部沙维什县 (新墨西哥州)的城市,邻近圣克莱尔(St. Clair)湖。罗斯维尔经常跟UFO(不明飞行物体)及外星人拉上关系,当中最为人熟悉的是罗
  • 密卡苏奇语密卡苏奇语(英语:Mikasuki language,Mikasuki这词英语又作Miccosukee,这语言有时亦称作Hitchiti-Mikasuki language)是一种由大约五百名居于佛罗里达州南部的人所使用的语言。
  • 罗曼·罗兰罗曼·罗兰(法语:Romain Rolland;1866年1月29日-1944年12月30日),20世纪的法国著名作家、音乐评论家,1915年度的诺贝尔文学奖得主。1867年出生于法国中部的克拉梅西,1880年全家迁至