名称:依赖倒置原则(Dependence Inversion Principle)
定义:程序要依赖于抽象接口,不要依赖于具体实现。依赖倒置原则的中心思想是面向接口编程。
- 高层模块不应依赖于低层模块,二者都应该依赖于抽象
- 抽象不应该依赖细节,细节应该依赖抽象
示例1:违反依赖倒置原则
UML:
代码:
public class DependenceInversion {
public static void main(String[] args) {
Task task = new Task();
task.receiveContent(new Email());
}
}
class Email{
public String getContent(){
return "邮件:植树节";
}
}
class Task{
public void receiveContent(Email email){
System.out.println(email.getContent());
}
}
示例2:遵守依赖倒置原则
UML:
代码:
public class DependenceInversion {
public static void main(String[] args) {
Task task = new Task();
// 邮箱
IReceiver receiver = new Email();
task.receiveContent(receiver);
// 钉钉
receiver = new DingDing();
task.receiveContent(receiver);
}
}
interface IReceiver{
String getContent();
}
class Email implements IReceiver{
@Override
public String getContent(){
return "邮件:植树节";
}
}
class DingDing implements IReceiver{
@Override
public String getContent() {
return "钉钉:植树节";
}
}
class Task{
public void receiveContent(IReceiver receiver){
System.out.println(receiver.getContent());
}
}
总结:相对于细节的多变性,抽象的东西要稳定的多;以抽象为基础搭建的架构比以细节为基础的架构要稳定的多;抽象接口或类不涉及具体的操作,展现细节的任务由实现类或子类去完成。