依赖倒置原则
优点:可以减少类间的耦合性丶提高系统稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险,Spring的 IOC DI 依赖注入也采用了依赖倒置
生活中的的依赖倒置原则:
例如说:春运都回家,但是回家的地点则不同,那每个人到站不同,但是都会从12306买票回家
代码中演示依赖倒置
我拿课程去举例子:
接下来创建一个接口ICourse,抽象方法学习课程
public interface ICourse {
void studyCourse();
}
有不同的课程,我想学习哪一个 接下来创建Java课程 ,前端课程,Python课程
public class JavaCourse implements ICourse {
public void studyCourse() {
System.out.println(" 在学习Java课程");
}
}
public class PythonCourse implements ICourse {
public void studyCourse() {
System.out.println(" 在学习 Python");
}
}
public class FECourse implements ICourse {
public void studyCourse() {
System.out.println(" 在学习前端课程");
}
}
我在网上学习有我自己的账号
public class QJC {
private ICourse iCourse;
public QJC(ICourse iCourse) {
this.iCourse = iCourse;
}
public void setiCourse(ICourse iCourse) {
this.iCourse = iCourse;
}
public void studyICourse(){
iCourse.studyCourse();
}
}
接下来进行代码演示
public class Test {
public static void main(String[] args) {
/*没有抽象 导致类 经常修改 V1*/
/* QJC qjc=new QJC();
qjc.studyFECourse();
qjc.studyJavaCourse();
qjc.studyPythonCourse();*/
/*通过方法注入 v2*/
/* QJC qjc=new QJC();
qjc.studyICourse(new JavaCourse());
qjc.studyICourse(new FECourse());
qjc.studyICourse(new PythonCourse());*/
/*构造器 注入 v3*/
/* QJC qjc=new QJC(new JavaCourse());
qjc.studyICourse();
QJC fe=new QJC(new FECourse());
fe.studyICourse();
QJC py=new QJC(new PythonCourse());
py.studyICourse();*/
QJC qjc=new QJC(new JavaCourse());
qjc.studyICourse();
qjc.setiCourse(new PythonCourse());
qjc.studyICourse();
}
}
这样能够实现耦合度降低,就算新增一个课程也不需要修改原来的代码,只需要实现ICourse方法,将其进行注入调用studyICourse() 就可以学习
UML图解:
第三章节:单一原则