依赖注入是面向对象编程很重要的思想,是实现解耦很重要的一种手段。编程
依赖注入是指a依赖于b,a不直接在内部实例化b,而是经过注入的方式,也就是构建和使用分离。与之相关的思想是,面向接口编程,而不要面向实现编程。设计模式
依赖注入通常须要面向对象语言,或者能够用必定方式实现面向对象的语言(好比lua能够利用元表实现类和继承,js或者ts也有类和对象的概念)。为啥须要面向对象语言呢?由于依赖注入须要面向接口编程,这须要语言支持派生和多态。服务器
依赖注入的形式主要有3种:1.构造函数注入(Constructor Injection)。2.接口注入。例如setMethod方法(Setter Injection)。3.设值方法(Setter Injection)。其实2和3是属于同一种方法。mvc
应用:在23种设计模式当中,装饰者模式也有运用相似依赖注入的思想(但每一个装饰者之间其实应该没有依赖关系?),每一个装饰者在装饰本身以前,先装饰经过构造函数注入的前一个装饰者须要装饰的东西。相似的,策略模式也算是运用了依赖注入的思想。最近在看puremvc,感受它里面的不少实现也都是依赖注入的思想。ide
其余:与依赖注入思想比较相似的是服务器定位器模式,它的思想是a依赖于b,a不直接在内部实例化b,而是经过服务器定位器得到b的实例。这实际上仍是依赖注入的思想,只不过换了一种实现方式。函数