依赖倒置原则

1定义

依赖倒置原则的本质就是通过抽象(接口或抽象类)使各个类或模块的实现彼此独立,不互相影响,实现模块间的松耦合。

l  高层模块不应该依赖底层模块,二者都应该依赖抽象。

l  抽象不应该依赖细节,细节应该依赖抽象。

l  依赖倒置的中心思想是面向接口编程。

l  依赖倒置原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础搭建的架构要稳定的多。

l  使用接口或抽象类的目的是指定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类来完成。

2好处及作用

采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定,降低并行开发引起的风险,提高代码的可读性和可维护性。

3依赖的三种方式

对象的依赖关系有三种方式来传递:

构想函数注入

在类中通过构造函数声明依赖对象,按照依赖注入的说法。

Setter依赖注入

在类中通过Setter方法声明依赖关系,依照依赖注入的说法

接口注入

在接口的方法中声明依赖对象

 

4实现

在项目中使用这个原则要遵循下面的规则:

  •  每个类尽量都有接口或者抽象类,或者抽象类和接口两都具备
  •  变量的表面类型尽量是接口或者抽象类
  •  任何类都不应该从具体类派生
  •  尽量不要覆写基类的方法
  • 如果基类是一个抽象类,而这个方法已经实现了,子类尽量不要覆写。类间依赖的是抽象,覆写了抽象方法,对依赖的稳定性会有一定的影响
  •  结合里氏替换原则使用

 

图1司机驾驶奔驰车类图

图2引入依赖倒置原则后的类图

构造函数传递依赖对象

public interface IDriver {

//是司机就应该会驾驶汽车

public void drive();

}

public class Driver implements IDriver{

private ICar car;

//构造函数注入

public Driver(ICar _car){

this.car = _car;

 }

 //司机的主要职责就是驾驶汽车

public void drive(){

this.car.run();

}

 }

Setter方法传递依赖对象

public interface IDriver {

//车辆型号 

public void setCar(ICar car);

//是司机就应该会驾驶汽车

public void drive(); 

public class Driver implements IDriver{ 

private ICar car;

public void setCar(ICar car){ 

this.car = car;

//司机的主要职责就是驾驶汽车 

public void drive(){ 

this.car.run(); 

}

接口声明依赖对象

public interface IDriver { 

//是司机就应该会驾驶汽车 

public void drive(ICar car);

}

public class Driver implements IDriver{

//司机的主要职责就是驾驶汽车 

public void drive(ICar car){ 

car.run();

}

 

参考链接:

https://www.cnblogs.com/az4215/p/11462878.html

https://blog.csdn.net/u011857683/article/details/80287274

https://www.cnblogs.com/cbf4life/archive/2009/12/15/1624435.html

posted on 2020-03-20 17:10  茜茜是qianqian  阅读(180)  评论(0)    收藏  举报