软件架构设计原则之依赖倒置原则


软件架构设计原则之依赖倒置原则


依赖倒置原则定义是这样的,在设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖抽象,抽象不应该依赖细节,细节依赖抽象。

通过依赖倒置可以减少类与类之间的耦合性,提高系统得稳定性,提高代码的可维护性和可读性,并且能够降低程序修改带来的风险。接下来我们通过代码示例一下依赖倒置原则:

1、我们创建一个MrF类,MrF正在学习java和python

public class MrF {
    
    public void studyJavaCourse(){
        System.out.println("java");
    }

    public void studyPythonCourse(){
        System.out.println("python");
    }
    
}

2.突然MrF觉得AI很火,又想学习AI课程。我们只有在MrF类里面在增加一个学习AI的方法。

public class MrF {

    public void studyJavaCourse(){
        System.out.println("java");
    }

    public void studyPythonCourse(){
        System.out.println("python");
    }

    public void studyAICourse(){
        System.out.println("AI");
    }
}

这样我们虽然也能增加了AI课程,但是如果MrF学习的非常杂呢,又想学习大数据等等几十门课,我们就要一直修改MrF的类,我们的依赖倒置原则就是为了解决这个问题,细节依赖抽象。首先我们抽象出Study类

public interface Study {

    void study();
}

然后我们分别创建不同课程类继承Study类

public class JavaCourse implements Study {
    @Override
    public void study() {
        System.out.println("java");
    }
}
public class PythonCourse implements Study {
    @Override
    public void study() {
        System.out.println("python");
    }
}

最后我们改造一下MrF类

public class MrF {

    private Study study;

    public MrF(Study study){
        this.study = study;
    }

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

现在看看代码调用,无论我们增加多少课程,都只是增加一个课程类,不会修改原有的代码,然后将要学习的课传给MrF就好了,

    public  void test1() {

        Study pythonCourse = new PythonCourse();

        MrF mrF = new MrF(pythonCourse);

        mrF.study();

    }

以上即是依赖倒置的原则,是不是非常简单。