名称:依赖倒置原则(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{@Overridepublic String getContent(){return "邮件:植树节";}
}class DingDing implements IReceiver{@Overridepublic String getContent() {return "钉钉:植树节";}
}class Task{public void receiveContent(IReceiver receiver){System.out.println(receiver.getContent());}
}
总结:相对于细节的多变性,抽象的东西要稳定的多;以抽象为基础搭建的架构比以细节为基础的架构要稳定的多;抽象接口或类不涉及具体的操作,展现细节的任务由实现类或子类去完成。