设计原则 - 依赖倒置原则
概念
- 依赖倒置原则的定义:Dependency Inversion Principle,DIP,高层模块不应该依赖低层模块,二者都应该依赖其抽象。
- 依赖倒置原则的中心思想:抽象不应该依赖细节;细节应该依赖抽象。
- 依赖倒置原则的核心思想:针对接口编程,不要针对实现编程。
- 依赖倒置原则的优点:可以减少类间的耦合性、提高系统稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险。
- 如果说开闭原则是面向对象设计的目标,依赖倒置原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体体现。
- 开闭原则是目标,里氏替换原则是基础,依赖倒置原则是手段,它们相互补充,相辅相成。
实例
代码实例
Coisini.java
/**
* @Description 课程学习
* @date Dec 3, 12
* @version 1.0
*/
public class Coisini {
public void studyJavaCourse() {
System.out.println("在学习Java课程");
}
public void studyPythonCourse() {
System.out.println("在学习Python课程");
}
}
Test.java
/**
* @Description 测试类
* @date Dec 3, 12
* @version 1.0
*/
public class Test {
public static void main(String[] args) {
// 高层模块依赖低层模块,Test的修改是依赖于Coisini实现的
Coisini coisini = new Coisini();
coisini.studyJavaCourse();
coisini.studyPythonCourse();
}
}
- 输出结果
在学习Java课程
在学习Python课程
开闭原则的实现
ICourse.java
/**
* @Description 课程接口
* @date Dec 3, 2021
* @version 1.0
*/
public interface ICourse {
/**
* 学习课程
*/
void studyCourse();
}
JavaCourse.java
/**
* @Description Java课程
* @date Dec 3, 2021
* @version 1.0
*/
public class JavaCourse implements ICourse{
@Override
public void studyCourse() {
System.out.println("在学习Java课程");
}
}
PythonCourse.java
/**
* @Description Python课程
* @author coisini
* @date Dec 3, 2021
* @version 1.0
*/
public class PythonCourse implements ICourse{
@Override
public void studyCourse() {
System.out.println("在学习Python课程");
}
}
Coisini.java
public class Coisini {
/**
* 学习课程
* @param iCourse
*/
public void studyImoocCourse(ICourse iCourse) {
iCourse.studyCourse();
}
}
Test.java
/**
* @Description 依赖倒置原则测试类
* @date Dec 3, 12
* @version 1.0
*/
public class Test {
public static void main(String[] args) {
// 面向接口编程
Coisini coisini = new Coisini();
coisini.studyImoocCourse(new JavaCourse());
coisini.studyImoocCourse(new PythonCourse());
}
}
- 输出结果
在学习Java课程
在学习Python课程
- 类图变化如下
- 依赖倒置原则的实现总结:程序要依赖于抽象接口,不要依赖于具体的实现,主要目的是降低耦合;以抽象为基础搭建起来的架构比以细节为基础搭建的架构更稳定
源码
GitHub
:https://github.com/Maggieq8324/design_pattern.git