依赖倒置原则
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) 收藏 举报