设计原则:依赖倒置原则
2019-07-08 本文已影响1人
谁家的猪
定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象
抽象不应该依赖细节;细节应该依赖抽象
针对接口编程,不要针对实现编程
优点:可以减少类间的耦合性,提高系统稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险
示例
实现Lily学习的功能(1)
目录结构
目录结构.png代码实现
- 创建Lily类
/**
* @author lijiayin
*/
public class Lily {
public void studyJava(){
System.out.println("学习Java");
}
public void studyPython(){
System.out.println("学习Python");
}
}
- 创建测试类测试
/**
* @author lijiayin
*/
public class Test {
public static void main(String[] args) {
Lily lily = new Lily();
lily.studyJava();
lily.studyPython();
}
}
-
测试结果
测试结果.png
实现Lily学习的功能(2)
还想学习Go怎么办?
目录结构
目录结构.png代码实现
- 创建ICourse接口
/**
* @author lijiayin
*/
public interface ICourse {
void studyCourse();
}
- 创建三个学习类:JavaCourse、PythonCourse、GoCourse
/**
* @author lijiayin
*/
public class JavaCourse implements ICourse {
@Override
public void studyCourse() {
System.out.println("学习Java");
}
}
/**
* @author lijiayin
*/
public class PythonCourse implements ICourse {
@Override
public void studyCourse() {
System.out.println("学习Python");
}
}
/**
* @author lijiayin
*/
public class GoCourse implements ICourse {
@Override
public void studyCourse() {
System.out.println("学习Go");
}
}
- 修改 Lily类
/**
* @author lijiayin
*/
public class Lily {
public void studyCourse(ICourse iCourse){
iCourse.studyCourse();
}
}
- 修改测试类
/**
* @author lijiayin
*/
public class Test {
public static void main(String[] args) {
Lily lily = new Lily();
lily.studyCourse(new JavaCourse());
lily.studyCourse(new PythonCourse());
lily.studyCourse(new GoCourse());
}
}
-
测试结果
测试结果.png
实现Lily学习的功能(3)
目录结构.png代码实现
- 修改Lily类
/**
* @author lijiayin
*/
public class Lily {
private ICourse iCourse;
public Lily(ICourse iCourse){
this.iCourse = iCourse;
}
public void studyCourse(){
this.iCourse.studyCourse();
}
}
- 修改测试类
/**
* @author lijiayin
*/
public class Test {
public static void main(String[] args) {
Lily lily = new Lily(new GoCourse());
lily.studyCourse();
}
}
-
测试结果
测试结果.png
实现Lily学习的功能(4)
目录结构.png代码实现
- 修改Lily类
/**
* @author lijiayin
*/
public class Lily {
private ICourse iCourse;
public void studyCourse(){
this.iCourse.studyCourse();
}
public void setiCourse(ICourse iCourse) {
this.iCourse = iCourse;
}
}
- 修改测试类
/**
* @author lijiayin
*/
public class Test {
public static void main(String[] args) {
Lily lily = new Lily();
lily.setiCourse(new JavaCourse());
lily.studyCourse();
lily.setiCourse(new PythonCourse());
lily.studyCourse();
lily.setiCourse(new GoCourse());
lily.studyCourse();
}
}
-
测试结果
测试结果.png -
UML图
UML.png