第6章 控制反转(IoC)
我们经常提及反转控制(IoC),但其实很少有人能够正确理解这个概念,本章将讲述如下内容。
大量使用工厂模式引起的问题。
什么是反转控制,反转控制在创建对象方面的应用和实现分类。
反转控制和依赖注射(DI)的关系。
根据最新流行的技术,总结和完善依赖注射(DI)的分类。
6.1 从创建对象谈起
我们之前讲解了使用工厂方法模式创建对象,比如现在有这样的场景:Client对象需要使用Service1的execute()方法完成特定功能,而Service1的实现Service1Impl类又依赖于Service2的实现类Service2Impl, UML静态类图如图6-1所示。
图6-1
为了减少依赖,我们为Service1和Service2对象的实例化分别提供工厂方法类的实现,代码大致如下。
于是,接口Service1和Service2工厂类的实现代码如下所示。
这样,Client类的实现如下。
我们的测试代码非常简单,如下所示。
new Client(). doSomething();
执行结果如下。
Service1 is doing something.
Service2 is doing something.