设计模式六大原则:单一职责原则
设计模式六大原则:接口隔离原则
设计模式六大原则:依赖倒置原则
设计模式六大原则:里氏替换原则
设计模式六大原则:迪米特法则
设计模式六大原则:开闭原则
依赖倒置原则的定义:
高层模块不应该依赖低层模块,二者应该依赖其抽象
抽象不应该依赖细节;细节应该依赖抽象
针对接口编程,不要针对实现编程
优点:
可以减少类间耦合性、提高系统稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险。
一个人叫tom它一直在学习,他可能学习java ,python,go,scala等等。。
那么我们对它所要学习的内容做一个抽象也就是定义一个接口
public interface IStudy {
public String study();
}
然后然后我们对他的学习的内容做实现
public class JavaStudy implements IStudy {
@Override
public String study() {
return "正在学习java";
}
}
public class PythonStudy implements IStudy {
@Override
public String study() {
return "正在学习python";
}
}
等等
接下来我们对tom的做一个单例,因为tom是一个唯一的人,但是他能被赋予学习很多课程。
public class Tom {
private IStudy iStudy;
private static Tom tom = new Tom();
public static Tom getInstance(){
return tom;
}
public void setICourse(IStudy iStudy){
this.iStudy = iStudy;
}
public String getStudy(){
return tom.getStudy();
}
}
接下来我们测试我们的实现
public static void main(String[] args) {
Tom tom = Tom.getInstance();
tom.setICourse(new JavaStudy());
tom.getStudy();
}
这样来看我们拿到tom,可以对其赋予任何课程他都可以学习。
但是上面这个例子看着有点简单,而且实现的功能并不强大,那么如果这个tom学习十门课或者上万门课呢?其实依赖倒置的原则,实现后就再也不用修改主要的逻辑代码了,你想要学习就自己实现一个课程类就好。请看下面的例子;
public static void main(String[] args) {
List<IStudy> studyList = new ArrayList<>();
studyList.add(new JavaStudy());
studyList.add(new PythonStudy());
studyList.forEach((tomCourse)->{
System.out.println(tomCourse.study());
});
}
这样我们就可以把我们想要学习的例子实现了,然后放在list就好了,tom就可以学习了。
这个例子虽然简单,但是在工作中我们如果有固定的流程的时候我们可以用这个大大的提高工作效率和代码的可读性。