以下总结自b站尚硅谷视频
1、高层模块不依赖低层模块,二者都应该依赖其抽象
2、抽象不依赖细节,细节应该依赖抽象
3、依赖倒转的中心是面向接口编程
4、依赖倒转原则是基于以下设计理念: 相对于细节的多变性,抽象的东西要稳定得多,以抽象为基础搭建的架构比细节为基础的架构稳定得多。在java中,抽象指的是接口或抽象类,而细节是其具体实现类
5、接口和抽象类的目的是定制好规范,不涉及具体操作,把展示的细节交给实现类完成。抽象和接口主要用于设计!
package com.sjms;
/**
* 依赖倒置原则
*/
public class DependencyInversion {
public static void main(String[] args) {
Person person = new Person();
person.receive(new Email());
//客户端无须改变
Person2 person2 = new Person2();
person2.receive(new Email2());
person2.receive(new WeiXin());
}
}
class Email{
public String getInfo(){
return "电子邮件信息:hello world";
}
}
//Person类过于依赖Email
class Person{
public void receive(Email email){
System.out.println(email.getInfo());
}
}
//优化——定义接口
interface IReceiver{
//定义方法,实现类去实现
public String getInfo();
}
class Email2 implements IReceiver{
public String getInfo(){
return "使用Email";
}
}
class WeiXin implements IReceiver{
public String getInfo(){
return "使用WX";
}
}
//方法2
class Person2 {
//对接口进行依赖(抽象的!)
public void receive(IReceiver receiver){
System.out.println(receiver.getInfo());
}
}
接口、构造器、setter方法实现依赖倒转
可以参考以下文章