软件架构设计原则之依赖倒置原则
软件架构设计原则之依赖倒置原则
依赖倒置原则定义是这样的,在设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖抽象,抽象不应该依赖细节,细节依赖抽象。
通过依赖倒置可以减少类与类之间的耦合性,提高系统得稳定性,提高代码的可维护性和可读性,并且能够降低程序修改带来的风险。接下来我们通过代码示例一下依赖倒置原则:
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(); }
以上即是依赖倒置的原则,是不是非常简单。