依赖反转原则

✍ dations ◷ 2025-11-24 04:26:34 #软件设计模式,软件设计,编程原则,面向对象的程序设计

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

该原则规定:

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

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

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

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

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

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


相关

  • 第二水俣病第二水俣病是1965年确认的四大公害病之一。因与熊本县的水俣病症状相同,而得此名。因发生在新潟县阿贺野川下流,因此又名“新潟水俣病”及“阿贺野川有机水银中毒”。水俣病早
  • 唐崇惕唐崇惕(1929年11月26日-),女,福建福州人,中国寄生虫学家。1954年从福建师范学院生物学系毕业,现任厦门大学生物系教授。1991年当选为中国科学院院士(学部委员)。主要从事研究与人类关
  • 世界主义世界主义(英语:Cosmopolitanism)是一种意识形态,可从正义概念的普世性出发,每一个世界公民都不受歧视地自我决定其发展。世界主义则是此世界因互相依存的网络交流的全球状态。世
  • abbr class=abbr title=S28: 接触皮肤后立即用大量液体冲洗S28/abb安全建议标准词(英语:Safety phrases,简写:S-phrases)是于《欧盟指导标准67/548/EEC 附录Ⅳ: 有关危险物品与其储备的安全建议》里定义。该列表被集中并再出版于指导标准2001/59/
  • 英国航空5390号班机英国航空5390号班机是英国航空一条由伯明翰前往西班牙马拉加的定期航班。1990年6月10日,飞机的驾驶室中其中一块挡风玻璃突然飞脱,机长的上半身被吸出机外,失去意识。但凭着副
  • 中国本土中国本土可能指:
  • 马克西米安马库斯·奥勒留·瓦勒里乌斯·马克西米安努斯·赫库里乌斯(Marcus Aurelius Valerius Maximianus Herculius,3世纪约250年-310年约7月),通称马克西米安(Maximian),罗马皇帝。285年任
  • 福鼎市福鼎市地处中国福建省东北部沿海,是宁德市下辖的县级市,北接浙江省。福鼎大多地方通行北片闽东语。大部地区通行闽东方言的桐山话;前岐、沙埕、贯岭、嵛山通闽南话,秦屿镇区、台
  • 幽灵搓球机幽灵搓球机Ghost Ballers是一支美国男子三对三篮球队,在BIG3比赛联盟比赛。
  • 亨利·杜替耶亨利‧杜替耶(法语:Henri Dutilleux,1916年1月22日-2013年5月22日),生于法国曼恩-卢瓦尔省昂热,法国古典音乐当代作曲家,活跃于二十世纪下半叶。他的作品既类似莫里斯·拉威尔、阿希