定义:高层模块不应该依赖底层模块,二者都应该依赖抽象
抽象不应该依赖细节,细节应该依赖抽象
针对接口编程,不要针对实现编程
优点:减少类间的耦合性、提高系统稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险
public class Student {
private String name;
public Student(){}
public Student(String name) {
this.name = name;
}
public void studyJAVACourse() {
System.out.println("学习JAVA课程");
}
public void studyPHPCourse() {
System.out.println("学习PHP课程");
}
}
此处相当于高层模块,依赖于Student,因为如果此时想再增加一个学Python的,就会在student里增加,高层模块才能调用
@Test
public void test1() throws Exception {
Student stu = new Student("小明");
stu.studyJAVACourse();
stu.studyPHPCourse();
}
改进
定义课程接口
public interface ICourse {
void studyCourse();
}
定义JAVA课程
public class JAVACourse implements ICourse {
@Override
public void studyCourse() {
System.out.println("学习JAVA课程");
}
}
定义PHP课程
public class PHPCourse implements ICourse {
@Override
public void studyCourse() {
System.out.println("学习PHP课程");
}
}
学生
public class Student {
private String name;
private ICourse course;
public Student(){}
public void setCourse(ICourse course) {
this.course = course;
}
public Student(String name) {
this.name = name;
}
public void studyCourse() {
course.studyCourse();
}
}
高层模块
@Test
public void test1() throws Exception {
Student stu = new Student("小明");
JAVACourse javaCourse = new JAVACourse();
PHPCourse phpCourse = new PHPCourse();
stu.setCourse(phpCourse);
stu.studyCourse();
}