PDF 课件和源代码下载地址:
https://github.com/geektime-geekbang/LetsJava
作者回复: 这个不算是典型的依赖注入,因为HuaweiPhone会有很多实例。比较典型的依赖注入是只有单个实例。
从组合的角度来说,并不存在耦合关系。因为HuaweiPhone是负责创建Phone的实例的。
以这个例子举例,如果Phone是别的代码创建的,然后HuaweiPhone需要用到这个Phone的实例。那么就算是依赖注入。
所以这个点在于,被依赖的对象(Phone)是谁创建的。在这个例子里,就是单纯的组合。
再举个例子。比如,A模块初始化好,才能初始化B模块。那么就是Spring擅长的依赖注入。如果B模块在初始化的过程中,自己用代码创建了一个A模块,那不需要依赖注入。
作者回复:
如果只是属性重用,是的,组合更合适。
如果是属性和用到属性的方法被重用,进而需要被覆盖,继承/传递给子类这种,可以考虑继承。
作者回复:
优先使用has a,谨慎使用is a。