依赖倒置原则

6大设计原则之依赖倒置原则

左心房为你撑大大i 提交于 2020-03-20 20:31:53
依赖倒置原则的定义 依赖倒置原则的原始定义如下: High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions. 翻译过来,包含如下三层含义: 高层模块不应该依赖低层模块,两者都应该依赖其抽象 抽象不应该依赖于细节 细节应该依赖于抽象 高层模块和低层模块容易理解,每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块,原子逻辑的再组装就是高层模块.抽象就是指 接口或抽象类,两者都不能被实例化;细节就是实现类. 依赖倒置原则在Java语言中表现为: 模块间的依赖通过抽象产生,实现类之间不发生直接依赖,其依赖关系是通过接口或抽象类产生的 接口或抽象类不依赖于实现类 实现类依赖接口或抽象类 依赖倒置原则的好处 采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性. 依赖的三种写法 在开发中,对象的依赖关系有三种方式来传递 1.构造函数传递依赖对象 在类中通过构造函数声明依赖对象,这种方式叫做构造函数注入 2

软件设计笔记:依赖倒置原则

守給你的承諾、 提交于 2020-02-26 22:42:03
依赖倒置原则 高层模块不应该依赖底层模块,二者都应该依赖抽象。 抽象不应该依赖具体实现,具体实现应该依赖抽象。 例如:JDBC 我们在java开发中访问数据库,代码并不直接依赖数据库驱动,而是依赖JDBC,当应用程序需要更换数据库,不需要修改任何代码。这正是因为应用代码,高层模块,不依赖数据库驱动,而是依赖抽象JDBC,而数据库驱动,作为底层模块,也依赖JDBC。 日常开发中,service层依赖DAO层,并不是直接依赖DAO的具体实现,而是依赖DAO提供的抽象接口,但这并不是依赖倒置,依赖倒置中,除了具体实现要依赖抽象,最重要的是抽象是属于谁的抽象。 按照依赖倒置原则,接口的所有权是被倒置的,也就是说,接口被高层模块定义,高层模块拥有接口,底层模块实现接口。不是高层模块依赖底层模块的接口,而是底层模块依赖高层模块的接口,从而实现依赖关系的倒置。 在上面的依赖层次中,每一层的接口都被高层模块定义,由底层模块实现,高层模块完全不依赖底层模块,及时是底层模块的接口。这样,底层模块的改动不会影响高层模块,高层模块的复用也不会依赖底层模块。对于Service和DAO这个例子来说,就是Service定义接口,DAO实现接口,这样才符合依赖倒置原则。 所以依赖倒置原则也被称为好莱坞原则:Dont't call me, I will call you. 即不要来调用我,我会调用你。Tomcat

依赖倒置原则——面向对象设计原则

狂风中的少年 提交于 2020-02-14 12:20:51
依赖倒置原则的定义 依赖倒置原则(Dependence Inversion Principle,DIP) 是 Object Mentor 公司总裁罗伯特·马丁(Robert C.Martin)于 1996 年在 C++ Report 上发表的文章。 依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High level modules shouldnot depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions)。其核心思想是:要面向接口编程,不要面向实现编程。 依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。 由于在软件设计中,细节具有多变性,而抽象层则相对稳定,因此以抽象为基础搭建起来的架构要比以细节为基础搭建起来的架构要稳定得多。这里的抽象指的是接口或者抽象类,而细节是指具体的实现类。 使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给它们的实现类去完成。 依赖、倒置原则的作用 依赖倒置原则的主要作用如下

依赖倒置原则——面向对象设计原则

二次信任 提交于 2020-02-14 11:00:41
依赖倒置原则的定义 依赖倒置原则(Dependence Inversion Principle,DIP) 是 Object Mentor 公司总裁罗伯特·马丁(Robert C.Martin)于 1996 年在 C++ Report 上发表的文章。 依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High level modules shouldnot depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions)。其核心思想是:要面向接口编程,不要面向实现编程。 依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。 由于在软件设计中,细节具有多变性,而抽象层则相对稳定,因此以抽象为基础搭建起来的架构要比以细节为基础搭建起来的架构要稳定得多。这里的抽象指的是接口或者抽象类,而细节是指具体的实现类。 使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给它们的实现类去完成。 依赖、倒置原则的作用 依赖倒置原则的主要作用如下

C#编程:依赖倒置原则DIP

独自空忆成欢 提交于 2020-02-10 01:08:45
一、前言 我们先来看看传统的三层架构,如下图所示: 从上图中我们可以看到:在传统的三层架构中,层与层之间是相互依赖的,UI层依赖于BLL层,BLL层依赖于DAL层。分层的目的是为了实现“高内聚、低耦合”。传统的三层架构只有高内聚没有低耦合,层与层之间是一种强依赖的关系,这也是传统三层架构的一种缺点。这种自上而下的依赖关系会导致级联修改,如果低层发生变化,可能上面所有的层都需要去修改,而且这种传统的三层架构也很难实现团队的协同开发,因为上层功能取决于下层功能的实现,下面功能如果没有开发完成,则上层功能也无法进行。 传统的三层架构没有遵循依赖倒置原则(DIP)来设计,所以就会出现上面的问题。 二、依赖倒置 依赖倒置(DIP):Dependence Inversion Principle的缩写,主要有两层含义: 高层次的模块不应该依赖低层次的模块,两者都应该依赖其抽象。 抽象不应该依赖于具体,具体应该依赖于抽象。 我们先来解释第一句话:高层模块不应该直接依赖低层模块的具体实现,而是应该依赖于低层模块的抽象,也就是说,模块之间的依赖是通过抽象发生的,实现类之间不应该发生直接的依赖关系,他们的依赖关系应该通过接口或者抽象类产生。 在来解释第二句话:接口或者抽象类不应该依赖于实现类。举个例子,假如我们要写BLL层的代码,直接就去实现了功能,等到开发完成以后发现没有使用依赖倒置原则

六个设计原则--依赖倒置原则

此生再无相见时 提交于 2019-12-19 10:01:30
3.1 依赖倒置原则的定义 依赖倒置原则(Dependence Inversion Principle,简称DIP)这个名字看着有点别扭,“依赖”还“倒置”,这到底是什么意思?依赖倒置原则的原始定义是:High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions。翻译过来,包含三层含义: 高层模块不应该依赖低层模块,两者都应该依赖其抽象; 抽象不应该依赖细节; 细节应该依赖抽象。 高层模块和低层模块容易理解,每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块,原子逻辑的再组装就是高层模块。那什么是抽象,什么又是细节呢?在Java语言中,抽象就是指接口或抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或继承抽象类而产生的类就是细节,其特点就是可以直接被实例化,也就是可以加上一个关键字new产生一个对象。依赖倒置原则在Java语言中的表现就是: 模块间的依赖是通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;

设计模式之依赖倒置原则

旧时模样 提交于 2019-12-06 08:18:16
  抽象的艺术才有生命力 高层与底层组件之间都应该依赖于抽象的组件。这一条深刻揭示了抽象的生命力,抽象的对象才是最有表达能力的对象,因为它通常是“无形”的,可以随时填充相关的细节。   英文缩写DIP(Dependence Inversion Principle)。   原始定义:High level modules should depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details www.szihome.net should depend upon abstractions.   翻译过来就三层含义:   高层模块不应该依赖低层模块,两者都应该依赖其抽象;   抽象不应该依赖细节;   细节应该依赖抽象。 抽象:即抽象类或接口,两者是不能够实例化的。 细节:即具体的实现类,实现接口或者继承抽象类所产生的类,两者可以通过关键字new直接被实例化。 现在我们来通过实例还原开篇问题的场景,以便更好的来理解。下面代码描述了一个简单的场景,Jim作为人有吃的方法,苹果有取得自己名字的方法,然后实现Jim去吃苹果。      问题由来:类A直接依赖类B,假如要将类A改为依赖类C

谈一谈依赖倒置原则

江枫思渺然 提交于 2019-12-04 21:52:49
为获得良好的阅读体验,请访问原文: 传送门 一、概念 依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。 抽象不应该依赖细节,细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并且能够降低修改程序所造成的风险。 二、为什么 先来看一个例子 可是依赖倒置原则是怎么做到的呢?我们先来看一个例子:一个爱学习的「我没有三颗心脏」同学现在正在学习「设计模式」和「Java」的课程,伪代码如下: public class Wmyskxz { public void studyJavaCourse() { System.out.println("「我没有三颗心脏」同学正在学习「Java」课程"); } public void studyDesignPatternCourse() { System.out.println("「我没有三颗心脏」同学正在学习「设计模式」课程"); } } 我们来模拟上层调用一下: public static void main(String[] args) { Wmyskxz wmyskxz = new Wmyskxz(); wmyskxz.studyJavaCourse(); wmyskxz

设计模式-----依赖倒置原则

陌路散爱 提交于 2019-12-04 02:09:42
一、原理介绍 1、官方定义 依赖倒置原则,英文缩写 DIP ,全称Dependence Inversion Principle。 原始定义:High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions。 官方翻译:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。 2、自己理解 2.1、原理解释 上面的定义不难理解,主要包含两次意思: 1)高层模块不应该直接依赖于底层模块的具体实现,而应该依赖于底层的抽象。换言之,模块间的依赖是通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。 2)接口和抽象类不应该依赖于实现类,而实现类依赖接口或抽象类。这一点其实不用多说,很好理解,“面向接口编程”思想正是这点的最好体现。 2.2、被“倒置”的依赖 相比传统的软件设计架构,比如我们常说的经典的三层架构,UI层依赖于BLL层,BLL层依赖于DAL层。由于每一层都是依赖于下层的实现,这样当某一层的结构发生变化时

设计模式——六大原则之依赖倒置原则(三)

折月煮酒 提交于 2019-12-04 00:33:31
依赖倒置原则的定义   依赖倒置原则(Dependence Inversion Principle,DIP)是 Object Mentor 公司总裁罗伯特·马丁(Robert C.Martin)于 1996 年在 C++ Report 上发表的文章。   依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High level modules shouldnot depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions)。其核心思想是:要面向接口编程,不要面向实现编程。   依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。 由于在软件设计中,细节具有多变性,而抽象层则相对稳定,因此以抽象为基础搭建起来的架构要比以细节为基础搭建起来的架构要稳定得多。这里的抽象指的是接口或者抽象类,而细节是指具体的实现类。   使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给它们的实现类去完成。 依赖、倒置原则的作用