依赖反转原则

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

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

该原则规定:

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

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

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

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

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

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


相关

  • 非维管植物维管植物 Tracheophyta非维管植物(或作非维管束植物)是对没有维管(木质部和韧皮部)的植物(包括绿藻)的总称。虽然非维管植物缺乏此类特殊的组织,但一部分的非维管植物会有特化来在
  • 环张力在有机化学中,环张力是当分子内的键结形成不正常角度时存在的不稳定类型。张力大多在小的环上,像是环丙烷和环丁烷这种其碳-碳-碳角度与近乎109°的理想值大大偏离的类型。.
  • 洛克菲勒大学洛克菲勒大学(英语:Rockefeller University)是一所私立大学,主要专注于生物医学领域的研究,位于纽约曼哈顿。前身为洛克菲勒医学研究所(Rockefeller Institute for Medical Resear
  • 信息理论性死亡信息理论性死亡意指储存在脑部的讯息被摧毁的程度严重,乃至于在理论上回复原本人格已是不可能的状况。信息理论性死亡是为了提供一种无论未来的医疗技术多么进步,都能用来定义
  • 模因体质人类学 文化人类学 语言人类学 分子人类学 社会人类学 考古学应用人类学 民族志 参与观察 文化相对论文化 • 社会 史前史 • 人类演化 亲属 婚姻 • 家庭 物质文化 种
  • 火山碎屑云火积云(flammagenitus、pyrocumulus或fire cloud)是一种相当浓厚的积云,常伴随火山或山火等高温环境中形成。火积云在动力学上与火灾旋风有一些类似之处,而这两个现象可能会一起
  • 1079年
  • 阿根廷时区由于阿根廷的经度位置,使得很多人会觉得阿根廷在UTC-4时区, 但实际上阿根廷使用的是UTC-3时区。在是否使用夏令时的问题上,阿根廷每年由总统决定,但由于阿根廷是联邦制国家,所
  • 量化 (数理逻辑)在语言和逻辑中,量化是用量词指定一个谓词的有效性的广度的构造,就是说指定谓词在一定范围的事物上成立的程度。产生量化的语言元素叫做量词。结果的句子是量化的句子,我们称我
  • 福晋叶赫那拉氏 (清太祖)福晋叶赫那拉氏,世居叶赫地方(今吉林省梨树县境内)。初为满洲正黄旗人,后为满洲正白旗人。《叶赫纳兰氏八旗族谱》记载她是拜三之女,阿尔卜之孙女,尼雅尼雅喀之曾孙女。 清太祖努