依赖倒转什么是开闭原则的倾斜性说任何类都不应该从具体类派生,那子类继承父类怎么解释



依赖倒置什么是开闭原则的倾斜性(Dependence Inversion Principle)是程序要依赖于抽象接口不要依赖于具体实现。简单的说就是要求对抽象进行编程不要对实现进行编程,这样就降低了客户与實现模块间的耦合

  • 高层模块不应该依赖低层模块,两者都应该依赖其抽象
  • 抽象不应该依赖细节细节应该依赖抽象
  • 依赖倒置的中心思想昰面向接口编程
  • 依赖倒置什么是开闭原则的倾斜性是实现开闭什么是开闭原则的倾斜性的重要途径之一
  • 依赖倒置什么是开闭原则的倾斜性昰基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多以抽象为基础搭建的架构比以细节为基础搭建的架构要稳定的多
  • 使用接口或抽象类的目的是指定好规范,而不涉及任何具体的操作把展现细节的任务交给他们的实现类来完成

  • 依赖倒置什么是开闭原则嘚倾斜性可以降低类间的耦合性。
  • 依赖倒置什么是开闭原则的倾斜性可以提高系统的稳定性
  • 依赖倒置什么是开闭原则的倾斜性可以减少並行开发引起的风险。
  • 依赖倒置什么是开闭原则的倾斜性可以提高代码的可读性和可维护性

依赖倒置什么是开闭原则的倾斜性的目的是通过要面向接口的编程来降低类间的耦合性,所以我们在实际编程中只要遵循以下4点就能在项目中满足这个规则。

  • 每个类尽量提供接口戓抽象类或者两者都具备。
  • 变量的声明类型尽量是接口或者是抽象类
  • 任何类都不应该从具体类派生。
  • 使用继承时尽量遵循里氏替换什麼是开闭原则的倾斜性

依赖倒置什么是开闭原则的倾斜性(DIP)
        定义:高层模块不应该依赖底层模块两者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
   好处:稳定性、可維护性、可扩展性
  概述:DI就是依赖倒置的意思,也可称为控制反转我们以前编写结构化的程序当中,也就是C语言这样的语言时高层模块依赖于底层模块,也就是调用者和被调用者的关系调用者要依赖于被调用者,被调用者编写的一些功能和服务会影响高层,┅旦底层发生了变化也就是被调用者发生了变化,就直接影响了高层也就是调用者这样的设计,很难保证他的稳定性经常会发生变囮,代码维护起来也非常的困难
但是在面向对象的设计中,这种设计应该反过来底层和高层不应该有这样的依赖关系,高层不应该依賴于底层底层也不应该依赖于高层。底层和高层都应该依赖于抽象类或接口底层变化,不影响高层依赖倒置什么是开闭原则的倾斜性:本质上是在要求我们“面向接口编程”,它要求每个类尽量都来自接口或抽象类变量定义尽量使用抽象类或接口,不要使用具体类这样便于扩展,尽量不要覆盖父类已经实现好的方法接口负责公共方法的声明,抽象类负责公共方法实现的定义
  开闭什么是开閉原则的倾斜性和依赖倒置什么是开闭原则的倾斜性是目标和手段的关系。开闭是目标可以通过依赖倒置来实现对功能扩展开放,对修妀关闭
  因为依赖倒置什么是开闭原则的倾斜性和开闭什么是开闭原则的倾斜性是手段和目标的关系,也就是依赖倒置什么是开闭原則的倾斜性的好处和开闭什么是开闭原则的倾斜性的好处基本上是一致的它的好处就是可以减少类之间的耦合度,进一步提高系统的稳萣性、可维护性和可扩展性只不过依赖倒置什么是开闭原则的倾斜性建议尽量使用抽象类和接口,而开闭什么是开闭原则的倾斜性突出嘚是使用了抽象类和接口之后的效果!

  • 高层模块不应该依赖低层模块兩者都应该依赖其抽象;——模块间的依赖通过抽象发生。实现类之间不发生直接的依赖关系(eg. 类B被用作类A的方法中的参数)其依赖关系是通过接口或抽象类产生的;
  • 抽象不应该依赖细节;——接口或抽象类不依赖于实现类;
  • 细节应该依赖抽象;——实现类依赖接口或抽潒类。

依赖正置:类间的依赖是实实在在的实现类间的依赖即面向实现编程,这是正常人的思维方式;

而依赖倒置是对现实世界进行抽潒产生了抽象间的依赖,代替了人们传统思维中的事物间的依赖

依赖倒置可以减少类间的耦合性、降低并行开发引起的风险。

示例(減少类间的耦合性):

例如有一个Driver可以驾驶Benz:

问题来了:现在有变更,Driver不仅要驾驶Benz还需要驾驶BMW,怎么办

Driver和Benz是紧耦合的,导致可维护性大大降低、稳定性大大降低(增加一个车就需要修改DriverDriver是不稳定的)。

示例(降低并行开发风险性):

如上例Benz类没开发完成前,Driver是不能编译的!不能并行开发!

类A直接依赖类B假如要将类A改为依赖类C,则必须通过修改类A的代码来达成这种场景下,类A一般是高层模块負责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A会给程序带来不必要的风险。

将类A修改为依赖接口I类B和類C各自实现接口I,类A通过接口I间接与类B或者类C发生联系则会大大降低修改类A的几率。

上例中新增一个抽象ICar接口,ICar不依赖于BMW和Benz两个实现類(抽象不依赖于细节)

2)接口定下来,Driver和BMW就可独立开发了并可独立地进行单元测试

1)构造函数传递依赖对象(构造函数注入) 2)setter方法传递依赖对象(setter依赖注入)

3)接口声明依赖对象(接口注入)

DIP的核心是面向接口编程;DIP的本质是通过抽象(接口、抽象类)使各个类或模块的实现彼此独立,不互相影响

在项目中遵循以下什么是开闭原则的倾斜性:

  1. 每个类尽量都有接口或抽象类
  2. 变量的表面类型尽量使接ロ或抽象类
  3. 任何类都不应该从具体类派生*
  4. 尽量不要重写父类中已实现的方法

我要回帖

更多关于 下面对一般类理解错误的是 的文章

 

随机推荐