面向对象设计(OOD)有助于我们开发出高性能、易扩展以及易复用的程序。其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC、DI以及Ioc容器等概念。
依赖倒置原则(DIP): 一种软件架构设计的原则(抽象概念)。
控制反转(IoC):一种反转流、依赖和接口的方式(DIP的具体实现方式)。
依赖注入(DI):IoC的一种实现方式,用来反转依赖(IoC的具体实现方式)。
IoC容器 :依赖注入的框架,用来映射依赖,管理对象创建和生存周期(DI框架)。
依赖倒置原则(DIP):高层模块不依赖于底层模块的实现,而低层模块依赖于高层模块定义的接口。
控制反转(IoC)
DIP是一种 软件设计原则,它仅仅告诉你两个模块之间应该如何依赖,但是它并没有告诉如何做。IoC则是一种 软件设计模式,它告诉你应该如何做,来解除相互依赖模块的耦合。控制反转(IoC),它为相互依赖的组件提供抽象,将依赖(低层模块)对象的获得交给第三方(系统)来控制,即依赖对象不在被依赖模块的类中直接通过new来获取。
依赖注入(DI)
控制反转(IoC)一种重要的方式,就是将依赖的对象的创建和绑定转移到被依赖对象类的外部来实现。
依赖注入(DI),它提供一种机制,将被依赖(低层模块)对象的引用传递给依赖(高层模块)对象。
方法一 构造函数注入: 在需要依赖的对象的构造函数中增加一个接口参数,在实例化需要依赖的对象时,将被依赖对象传入。
方法二 方法注入: 同上,通过方法实现。
IoC容器
上面所有的例子中,我们都是通过手动的方式来创建被依赖对象,并将其传递给依赖模块
对于大型项目来说,相互依赖的组件比较多。如果还用手动的方式,自己来创建和注入依赖的话,显然效率很低,而且往往还会出现不可控的场面。正因如此,IoC容器诞生了。IoC容器实际上是一个DI框架,它能简化我们的工作量。它包含以下几个功能:
- 动态创建、注入依赖对象。
- 管理对象生命周期。
- 映射依赖关系。