依賴是可以傳遞的,隻要做到抽象依賴即使是多層依賴傳遞也都是OK的
對象的依賴關系有三種防水:
- 構造函數傳遞依賴對象
在類中通過構造函數聲明依賴對象,通過這種構造函數注入的方法将第一部分中提到的IDriver和Driver進行修改
public interface IDriver{
public void drive();
}
public class Driver implements IDriver{
private ICac car;
public Driver(ICar car){
this.car = ncar;
}
public void drive(){
this.car.run();
}
}
- setter方法傳遞依賴對象
在抽象中設定setter方法聲明依賴關系,按照setter注入修改上述兩個程式
public interface IDriver{
public void setCar(ICar car);
public void drive();
}
public class Driver implements IDriver{
private ICar car;
public void setCar(ICar car){
this.car = ncar;
}
public void drive(){
this.car.run();
}
}
- 接口聲明依賴對象
依賴倒置的本質:通過抽象(接口或者抽象類)使得各個類或者子產品實作彼此獨立,互不影響實作低耦合度
- 每個類及你選哪個都有接口或者抽象類,或者抽象類和接口都具備(基本要求)
- 變量的表面類型盡量是接口或者抽象類
- 任何類都不應該從具體類派生
- 盡量不覆寫基類方法
- 結合裡氏替換原則
由于項目中很難展現出依賴倒置原則抓住原則的核心“面向接口程式設計”即可