依赖倒置原则定义:
模块间的依赖通过抽象发生, 实现类之间不发生直接的依赖关系, 其依赖关系是通过接口或抽象类产生的 ,接口或抽象类不依赖于实现类,实现类依赖接口或抽象类。
依赖倒置原则的优点:
1.降低模块之间的耦合度,将每个类之间的依赖关系降到最低,相互依赖变少了,那么系统将会更加稳定。
2.有利于代码的扩展和维护,因为只用抽象来表示依赖关系,就可以使用该抽象类型的所有子类。
3.降低并行开发的风险,因为是面向接口编程,所以可以先定义抽象接口,然后多人同时开发,此时只要保证能正常调用接口,一般就不会出现问题。
依赖的三种写法:
1.构造函数传递依赖,该依赖的特点是依赖对象对于引用对象是必须的,并且他们的生命周期也是一致的,在创建引用对象的时候就需要传递依赖对象才能构造成功,并且依赖对象一般是不可变的,始终使用的是同一个。
2.set方法传递依赖,该依赖的特点是依赖对象和引用对象的生命周期一般不是同步的,也有可能不是必须的。可以在需要的时候注入依赖对象,也可以多次注入。
3.方法传递,这种传递方式对于引用对象的依赖程度最低,一般只有在调用该方法的时候才需要传递该依赖,其他情况下并不需要该依赖对象的支持。
学习心得:
依赖倒置原则的本质就是通过抽象( 接口或抽象类) 使各个类或模块的实现彼此独立,
不互相影响, 实现模块间的松耦合, 我们怎么在项目中使用这个规则呢? 只要遵循以下的几
个规则就可以:
1. 每个类尽量都有接口或抽象类, 或者抽象类和接口两者都具备
这是依赖倒置的基本要求, 接口和抽象类都是属于抽象的, 有了抽象才可能依赖倒置。
2. 变量的表面类型尽量是接口或者是抽象类
很多书上说变量的类型一定要是接口或者是抽象类, 这个有点绝对化了, 比如一个工具
类, xxxUtils一般是不需要接口或是抽象类的。 还有, 如果你要使用类的clone方法, 就必须
使用实现类, 这个是JDK提供的一个规范。
3.任何类都不应该从具体类派生
如果一个项目处于开发状态, 确实不应该有从具体类派生出子类的情况, 但这也不是绝
对的, 因为人都是会犯错误的, 有时设计缺陷是在所难免的, 因此只要不超过两层的继承都
是可以忍受的。 特别是负责项目维护的同志, 基本上可以不考虑这个规则, 为什么? 维护工
作基本上都是进行扩展开发, 修复行为, 通过一个继承关系, 覆写一个方法就可以修正一个
很大的Bug, 何必去继承最高的基类呢? ( 当然这种情况尽量发生在不甚了解父类或者无法
获得父类代码的情况下。 )
4. 尽量不要覆写基类的方法
如果基类是一个抽象类, 而且这个方法已经实现了, 子类尽量不要覆写。 类间依赖的是
抽象, 覆写了抽象方法, 对依赖的稳定性会产生一定的影响。
5.结合里氏替换原则使用
根据里氏替换原则, 我们可以得出这样一个通俗的规则: 接口负责定义public属性和方法, 并且声明与其他
对象的依赖关系, 抽象类负责公共构造部分的实现, 实现类准确的实现业务逻辑, 同时在适当的时候对父类进行细化。
相关推荐
### 依赖倒置原则在软件工程中的应用 #### 引言 依赖倒置原则(Dependency Inversion Principle,简称 DIP)是面向对象设计的核心原则之一,由著名软件工程师 Robert C. Martin 在其专栏文章中提出。该原则对于...
以设计模式为例,依赖倒置原则在很多模式中都有体现,如工厂模式、策略模式、观察者模式等。在工厂模式中,我们定义一个工厂接口,具体的生产逻辑由各个具体的工厂类实现,这样调用者只需要依赖工厂接口,无需关心...
设计模式6大原则:依赖倒置原则
- 在设计模式中,工厂模式、策略模式、观察者模式等都体现了依赖倒置原则。例如,工厂模式通过创建产品接口,使得客户端代码可以依赖于产品接口,而不是具体的产品实现。 3. **优点**: - 提高代码的可复用性:...
首先,依赖倒置原则(Dependency Inversion Principle, DIP)由Robert C. Martin提出,其核心思想是高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象。这里的抽象通常指的是接口或者抽象类。DIP通过接口...
5. 依赖倒置原则(Dependency Inversion Principle, DIP):高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象。抽象不应该依赖于具体实现,而具体实现应该依赖于抽象。 接下来,我们来看看23种设计模式...
6. 书中还提到了六大设计原则,包括单一职责原则(Single Responsibility Principle)、里氏替换原则(Liskov Substitution Principle)、依赖倒置原则(Dependency Inversion Principle)、接口隔离原则(Interface...
这份名为“设计模式PPT——25种设计模式详解”的资料,显然是一个深入探讨设计模式的教程,它通过PDF格式对25种主要的设计模式进行了详尽的阐述。 首先,我们要理解设计模式的基本概念。设计模式不是代码,而是一种...
Java依赖倒置原则是软件设计中的一个重要概念,它源自于设计模式之父Misko Hevery提出的"Dependency Inversion Principle",简称为DIP。这个原则是面向对象设计的五大原则(SOLID)之一,旨在提高代码的可复用性和可...
- 依赖倒置原则(Dependency Inversion Principle):高层模块不应该依赖于低层模块,二者都应该依赖于抽象。 - 接口隔离原则(Interface Segregation Principle):不应强迫客户依赖于它们不用的方法。 - 合成...
依赖倒置原则(Dependency Inversion Principle,简称DIP)是面向对象设计原则中的一个核心概念,其目的在于降低软件模块之间的耦合度,从而提高系统的可维护性和可扩展性。DIP强调高层模块与低层模块之间的依赖关系...
开闭原则是面向对象设计中的一个核心原则,它在JAVA设计模式中占据着重要的地位。这一原则由格里·贝斯提出,旨在指导开发者如何设计可维护和可扩展的软件系统。开闭原则(Open-Closed Principle,OCP)的核心思想是...
此外,书中可能还会涉及面向对象设计原则,如单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)和接口隔离原则(ISP),这些都是设计模式背后的重要理论基础。 总的来说,《设计模式--基于C#...
在软件设计领域,依赖倒置、控制反转、依赖注入以及面向接口编程是四个非常重要的概念,它们都是现代软件开发中的核心原则,特别是对于构建可扩展、可维护的系统至关重要。 首先,我们来深入理解一下“依赖倒置”...
同时,设计模式也有助于提升系统的可扩展性和可维护性,因为它们遵循了良好的设计原则,如单一职责原则、开闭原则、里氏替换原则、依赖倒置原则和接口隔离原则。 在Java开发中,熟练掌握和运用设计模式不仅可以提升...
5. **依赖倒置原则**:高层模块不应该依赖于低层模块,而是应该依赖于抽象。同时,抽象不应该依赖于细节,细节应该依赖于抽象。 6. **组合/聚合复用原则**:鼓励使用组合或聚合来实现复用,而不是使用继承。 7. **...
包括如何在C#项目中组织代码,遵循SOLID原则(单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则),以及如何利用设计模式优化软件架构。 "扩展"部分可能涉及如何在现有设计模式的基础上进行创新...
- 依赖倒置原则(Dependency Inversion Principle,DIP):高层模块不应该依赖低层模块,它们都应该依赖抽象。这有助于减少模块间的耦合度,提高系统的灵活性和可复用性。 - 接口隔离原则(Interface Segregation ...
4. **依赖倒置原则**:依赖于抽象,不要依赖于具体实现。 5. **接口隔离原则**:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 这些原则有助于创建出可维护、可扩展和易于理解...
3. 依赖倒置原则(Dependency Inversion Principle,DIP) 4. 接口隔离原则(Interface Segregation Principle,ISP) 5. 迪米特法则(Law of Demeter,LoD) 6. 合成复用原则(Composite Reuse Principle,CRP) ...