依赖倒置要求我们要针对抽象层编程,而不是针对具体类编程。即我们通过接口或者抽象类来进行变量、参数和方法以及数据类型转换的声明,而不是通过具体的类。
其中的关键还是以抽象方式耦合。
依赖注入的方式
1.构造注入
通过实例构造方法将对象作为参数注入
public interface AbstractBook {
public void view();
}
public interface AbstractReader {
public void read();
}
public class ConcreateReader implements AbstractReader{
private AbstractBook book;
public ConcreateReader(AbstractBook book){
this.book = book;
}
public void read() {
book.view();
}
}
public class ConcreteBook implements AbstractBook{
public void view() {
//...
}
}
2.设值注入
在接口中定义set方法来注入实例变量,在具体类中实现该方法并进行设值。
public interface AbstractBook {
public void view();
}
public interface AbstractReader {
public void setBook(AbstractBook book);
public void read();
}
public class ConcreateReader implements AbstractReader{
private AbstractBook book;
public void setBook(AbstractBook book) {
this.book = book;
}
public void read() {
book.view();
}
}
public class ConcreteBook implements AbstractBook{
public void view() {
//...
}
}
3.接口注入
直接实现方法,将对象写入方法中
public interface AbstractBook {
public void view();
}
public interface AbstractReader {
public void read(AbstractBook book);
}
public class ConcreateReader implements AbstractReader{
public void read(AbstractBook book) {
book.view();
}
}
public class ConcreteBook implements AbstractBook{
public void view() {
//...
}
}
依赖注入就是将一个类的对象传入到另一个类中,而在注入是尽量注入如雷对象,在具体程序运行时在通过子类对象来覆盖父类对象。