高层模块不应该依赖底层模块,二者都应该依赖其抽象;
抽象不应该依赖细节;细节应该依赖抽象;
可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并能够降低修改程序所
造成的风险。
每次新增课程,在Levi类中新增:
public class Levi {
public void studyJavaClss(){
System.out.println("Levi在学习java课程!");
}
public void studyPythonClss(){
System.out.println("Levi在学习Python课程!");
}
}
创建ICourse抽象类,Levi进行实现,并传入参数
public interface ICourse {
void study();
}
public class Levi2 {
public void study(ICourse iCourse){
iCourse.study();
}
}
main 方法执行
Levi2 levi2 = new Levi2();
levi2.study(new JavaClass());
levi2.study(new PyhonClass());
通过构造器进行课程的传递
public class Levi3 {
private ICourse iCourse;
public Levi3(ICourse iCourse) {
this.iCourse = iCourse;
}
public void study(){
iCourse.study();
}
}
main
Levi3 levi3 = new Levi3(new JavaClass());
levi3.study();
通过set方法传递
public class Levi4 {
private ICourse iCourse;
public ICourse getiCourse() {
return iCourse;
}
public void setiCourse(ICourse iCourse) {
this.iCourse = iCourse;
}
public void study(){
iCourse.study();
}
}
总体Run
public class Run {
public static void main(String[] args) {
//========v1=======
//想要学习什么课程,在Levi类中加新的课程,维护比较麻烦
Levi levi = new Levi();
levi.studyJavaClss();
levi.studyPythonClss();
//========v2=======
//想要学习什么课程,通过new传对象进行学习,不用依赖Levi新加的方法
Levi2 levi2 = new Levi2();
levi2.study(new JavaClass());
levi2.study(new PyhonClass());
//========v3=======
//想要学习什么课程,通过构造器传递参数进行初始化
Levi3 levi3 = new Levi3(new JavaClass());
levi3.study();
//========v4=======
//通过set初始化
Levi4 levi4 = new Levi4();
levi4.setiCourse(new JavaClass());
levi4.study();
}
}
原文:https://www.cnblogs.com/liweiweicode/p/12380806.html