依赖注入

依赖注入指的就是类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;
	}

}

经过修改之后船和船桨更加解耦,特别是第三种接口传递依赖,当需求发生变化时,修改的地方会比较少,结构也很清晰。

posted @ 2017-02-17 14:12  黄大仙爱编程  阅读(171)  评论(0编辑  收藏  举报