依赖注入指的就是类A依赖于类B,通过外部注入的方式来实现,而不是通过自身去实现。
这样做的好处就是可以使得代码之间更加的解耦。
举个例子,船(ship)包含有船桨(oar),以下为高耦合的写法,
public class Oar { //船桨
public Oar(){
}
}
public class Ship {
private Oar oar;//船桨
public Ship(){
oar = new Oar();//在类中自己实现船桨
}
}这样写的坏处就是,ship和oar耦合度太高,将来如果oar发生变化,比如需要指定oar的长度
public class Oar {
int length;
public Oar(int length){
this.length = length;
}
}
那么ship的代码也需要进行修改
public class Ship {
private Oar oar;
public Ship(int length){//指定船桨的长度
oar = new Oar(length);
}
}使用依赖注入的方法对上面的代码进行修改,通常有3中方法,
1.构造函数传递依赖
public class Ship {
private Oar oar;
public Ship(Oar oar){
this.oar = oar;//构造函数传递
}
}2.Setter函数传递
public class Ship {
private Oar oar;
public Ship(){
}
public void setOar(Oar oar){//setter函数传递
this.oar = oar;
}
}3.接口声明传递
将船和船桨抽象成一个接口
public interface OarI {//浆接口
}
public interface ShipI {//船接口
public void setOar(OarI oar);//接口依赖传递
}船和浆分别继承接口
public class Oar implements OarI{
public Oar(){
}
}
public class Ship implements ShipI{
private OarI oar;
public Ship(){
}
@Override
public void setOar(OarI oar) {
this.oar = oar;
}
}经过修改之后船和船桨更加解耦,特别是第三种接口传递依赖,当需求发生变化时,修改的地方会比较少,结构也很清晰。
原文:http://www.cnblogs.com/huangbei1990/p/6409625.html