Java设计模式-七大架构设计原则-依赖倒置原则
从这一专栏开始将学习设计模式,上课学习和自己总结归纳的笔记将总结出来供大家参考。
参考书籍:《设计模式就该这样学》
其他文章:
依赖倒置原则
依赖倒置原则(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设计模式中的依赖倒置原则,解释了该原则的含义和好处,包括降低耦合性和提高系统稳定性。通过一个关于学生Tom学习不同课程的例子,展示了如何实际应用依赖倒置原则,以减少代码修改的风险。在实践部分,讨论了如何创建抽象接口和具体课程类,并通过构造器实现依赖注入,使得在添加新课程时无需修改原有代码。

5455

被折叠的 条评论
为什么被折叠?



