设计模式_02_依赖倒置原则
依赖倒置原则
- 定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象
- 抽象不应该依赖细节;细节应该依赖抽象
- 针对接口编程,不要针对实现编程
- 优点:可以减少类之间的耦合性、提高系统稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险
public interface Course {
void study();
}
public class JavaCourse implements Course {
@Override
public void study() {
System.out.println("学习java课程");
}
}
public class PythonCourse implements Course {
@Override
public void study() {
System.out.println("学习Python课程");
}
}
public class SparkCourse implements Course {
@Override
public void study() {
System.out.println("学习Spark课程");
}
}
public class Tom {
private Course course;
public Tom(Course course) {
this.course = course;
}
public Tom() {
}
public void wantToStudy(Course course) {
course.study();
}
public void wantToStudy() {
course.study();
}
public void setCourse(Course course) {
this.course = course;
}
}
public class Test {
public static void main(String[] args) {
System.out.println("----------- v1 -------------");
Tom tom = new Tom();
tom.wantToStudy(new JavaCourse());
tom.wantToStudy(new PythonCourse());
tom.wantToStudy(new SparkCourse());
System.out.println("----------- v2 ----------");
Tom tom1 = new Tom(new JavaCourse());
tom1.wantToStudy();
System.out.println("----------- v3 ----------");
Tom tom2 = new Tom();
tom2.setCourse(new JavaCourse());
tom2.wantToStudy();
tom2.setCourse(new PythonCourse());
tom2.wantToStudy();
}
}
类图:
执行结果:
源码地址