首页 » 设计模式之禅(第2版) » 设计模式之禅(第2版)全文在线阅读

《设计模式之禅(第2版)》3.3 依赖的三种写法

关灯直达底部

依赖是可以传递的,A对象依赖B对象,B又依赖C,C又依赖D……生生不息,依赖不止,记住一点:只要做到抽象依赖,即使是多层的依赖传递也无所畏惧!

对象的依赖关系有三种方式来传递,如下所示。

1.构造函数传递依赖对象

在类中通过构造函数声明依赖对象,按照依赖注入的说法,这种方式叫做构造函数注入,按照这种方式的注入,IDriver和Driver的程序修改后如代码清单3-11所示。

代码清单3-11 构造函数传递依赖对象

public interface IDriver {     //是司机就应该会驾驶汽车     public void drive;}public class Driver implements IDriver{     private ICar car;       //构造函数注入     public Driver(ICar _car){      this.car = _car;     }     //司机的主要职责就是驾驶汽车     public void drive{     this.car.run;     }}  

2.Setter方法传递依赖对象

在抽象中设置Setter方法声明依赖关系,依照依赖注入的说法,这是Setter依赖注入,按照这种方式的注入,IDriver和Driver的程序修改后如代码清单3-12所示。

代码清单3-12 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 = car;     }     //司机的主要职责就是驾驶汽车     public void drive{     this.car.run;     }}  

3.接口声明依赖对象

在接口的方法中声明依赖对象,3.2节的例子就采用了接口声明依赖的方式,该方法也叫做接口注入。