Ioc(控制反转)的概念已经提了很多年了,已经不是“时髦”的新名词,但对于刚入行的新程序员来说,可能还不太好理解,经常有新人抱怨,看了些资料,但对于Ioc的概念还是懵懵懂懂。这里主要谈一下我个人的见解。
一、什么是Ioc
Ioc全称为Inversion of Control,中文翻译为“控制反转”。Ioc是一种设计思想。
下面我们谈一下控制反转中,“控制”指的是什么,“反转”又反转了什么。
看一个例子:
我们在武器接口(IWeapon)中定义一个射击方法,枪(Gun)实现这个接口完善射击方法,最后Person类持有一个武器,并据用攻击方法。
这里我们看到Person类中持有一个抽象对象,而构造函数中赋值具体的Gun就构成了强耦合。如果我们要修改Person类持有的抽象内容,我们就要修改代码,这不符合设计模式中开放封闭的原则!
这时,我们想把Person类对 IWeapon 类型对象创建的“控制”权限“反转”到一个“容器”或其他内容中,这就是“Ioc”。
二、实现Ioc
现在添加一个容器类,在类中维护一个类型映射,具体代码如下。
我们再添加一个弓(Bow)类
修改Main函数中代码:
在程序的开始注册容器中类型映射,然后Person中的IWeapon创建就交给Ioc容器来注入。