Java设计模式-七大架构设计原则-依赖倒置原则

Java设计模式-七大架构设计原则-依赖倒置原则

从这一专栏开始将学习设计模式,上课学习和自己总结归纳的笔记将总结出来供大家参考。
参考书籍:《设计模式就该这样学》

其他文章:

Java设计模式-UML类图 Java设计模式-七大架构设计原则-开闭原则
Java设计模式-七大架构设计原则-依赖倒置原则 Java设计模式-七大架构设计原则-单一职责原则
Java设计模式-七大架构设计原则-接口隔离原则 Java设计模式-七大架构设计原则-最少知道原则(迪米特法则)
Java设计模式-七大架构设计原则-里氏替换原则和合成复用原则 Java设计模式-创建型设计模式-简单工厂模式
Java设计模式-创建型设计模式-工厂方法模式(工厂模式) Java设计模式-创建型设计模式-抽象工厂模式
Java设计模式-创建型设计模式-建造者模式 Java设计模式-创建型设计模式-原型模式
Java设计模式-创建型设计模式-单例模式 Java设计模式-结构型设计模式-适配器模式
Java设计模式- 结构型设计模式-享元模式 Java设计模式- 结构型设计模式-外观模式
Java设计模式- 结构型设计模式-桥接模式 Java设计模式-结构型模式设计模式-组合模式
Java设计模式-行为型设计模式-观察者模式

文章目录

  • Java设计模式-七大架构设计原则-依赖倒置原则
    • 依赖倒置原则
      • 1.1依赖倒置原则的实际应用
      • 1.2测试类及其结果
      • 1.3总结

依赖倒置原则

依赖倒置原则(Dependence Inversion Principle DIP):高层模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。

好处:降低类与类之间的耦合性,提高系统稳定性,提高代码的可读性和可维护性,并降低修改程序带来的风险

1.1依赖倒置原则的实际应用

现在有一个学生叫做Tom,他学习了Java和Python两门课

public class Tom {
    public void studyJava(){
        System.out.println("Tom学习Java");
    }
    public void studyPython(){
        System.out.println("Tom学习Python");
    }
}

有一天Tom又报名了JavaScript等课程,如果要在Tom类里面加studyJavaScript等方法后,首先会在Tom类里面过于臃肿,而且在调用的测试类中(高层调用类)也要修改代码,所以会非常不稳定,如果要增加的话按如下方法进行增加

首先创建一个课程的抽象接口ICourse

public interface ICourse {
    void study();
}

然后创建一个JavaCourse类和PythonCourse类并且新建一个JavaScriptCourse类

public class JavaCourse implements ICourse{
    @Override
    public void study() {
        System.out.println("Tom学习Java");
    }
}

public class PythonCourse implements ICourse{
     @Override
    public void study() {
        System.out.println("Tom学习Python");
    }
}

public class JavaScriptCourse implements ICourse {
     @Override
    public void study() {
        System.out.println("Tom学习JavaScript");
    }
}

最后修改Tom类,在这里就是依赖注入,通过构造器的方式依赖注入。

public class Tom {
    private ICourse course;

    public Tom(ICourse course) {
        this.course = course;
    }

    public void studyCourse(){
        course.study();
    }
}

1.2测试类及其结果

public class DipTest {
    public static void main(String[] args) {
        Tom tom1=  new Tom(new JavaCourse());
        tom1.studyCourse();

        Tom tom2=  new Tom(new PythonCourse());
        tom2.studyCourse();

        Tom tom3=  new Tom(new JavaScriptCourse());
        tom3.studyCourse();

    }
}

在这里插入图片描述

1.3总结

从修改后的代码可以看出,无论Tom再加多少课,每加一门课只需要加一个类。通过传递参数的方式告诉Tom,而不需要修改底层代码。

你可能感兴趣的:(Java设计模式,架构,java,依赖倒置原则,设计模式)