• st
    2019-08-03
    老师您好,
    以HuaweiPhone和Phone的关系举例,如果不用继承,而是在HuweiPhone的属性里面引用Phone,
    这种方式算是一种依赖注入吗?这种组合的方式会有一个问题是HuweiPhone的逻辑要依赖于Phone,
    怎么解耦这种关系呢?

    作者回复: 这个不算是典型的依赖注入,因为HuaweiPhone会有很多实例。比较典型的依赖注入是只有单个实例。

    从组合的角度来说,并不存在耦合关系。因为HuaweiPhone是负责创建Phone的实例的。

    以这个例子举例,如果Phone是别的代码创建的,然后HuaweiPhone需要用到这个Phone的实例。那么就算是依赖注入。

    所以这个点在于,被依赖的对象(Phone)是谁创建的。在这个例子里,就是单纯的组合。

    再举个例子。比如,A模块初始化好,才能初始化B模块。那么就是Spring擅长的依赖注入。如果B模块在初始化的过程中,自己用代码创建了一个A模块,那不需要依赖注入。

    
     1
  • Geek_421d56
    2019-11-28
    老师好!如果是两个属性高度重合的VO,比如新增VO和修改VO,后者只比前者多了个属性id,那么按照您的说法,这其实是用组合更合适,而非继承对吧?

    作者回复:
    如果只是属性重用,是的,组合更合适。

    如果是属性和用到属性的方法被重用,进而需要被覆盖,继承/传递给子类这种,可以考虑继承。

    
    
  • 小妖精
    2019-09-27
    has-a和is-a , 🤩我又成长了!

    作者回复:
    优先使用has a,谨慎使用is a。

    
    
我们在线,来聊聊吧