设计模式_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();
    }
}

类图:
设计模式_02_依赖倒置原则
执行结果:
设计模式_02_依赖倒置原则
源码地址