这个是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
设计代码结构的时候, 高层模块不应该依赖底层模块,二者应该依赖它的抽象, 抽象不应该依赖细节, 细节依赖抽象.
通过依赖倒置,减少类与类之间的耦合, 提高系统的稳定性, 可维护性. 降低修改程序造成的风险.
例子
还是以课程为例
public class Tom {public void studyJavaCourse() {System.out.println("tom在学习java课程");}public void studyPythonCourse() {System.out.println("tom在学习python课程");}}
来调用一下
public static void main(String[] args) {Tom tom = new Tom();tom.studyJavaCourse();tom.studyPythonCourse();}
tom热爱学习, 后续还会学习AI, 大数据.
这时候, 需要从低层到高层依次修改, 在tom中增加studyAI(),高层也要追加调用, 这样一来我们的系统非常不稳定
我们创建个接口
public interface ICourse {void study();}
java课程接口
public class JavaCourse implements ICourse {@Overridepublic void study() {System.out.println("正在学习java课程");}}
python课程接口
public class PythonCourse implements ICourse {@Overridepublic void study() {System.out.println("正在学习python课程");}}
我们来调用下
public class Tom {public void study(ICourse course) {course.study();}public static void main(String[] args) {Tom tom = new Tom();tom.study(new JavaCourse());tom.study(new PythonCourse());}}
tom的兴趣无论再怎么多, 只要添加类, 通过传参数的方式告诉调用那边就行
传参数还有构造器注入, setter方法

