第6章 控制反转(IoC)

    我们经常提及反转控制(IoC),但其实很少有人能够正确理解这个概念,本章将讲述如下内容。

    大量使用工厂模式引起的问题。

    什么是反转控制,反转控制在创建对象方面的应用和实现分类。

    反转控制和依赖注射(DI)的关系。

    根据最新流行的技术,总结和完善依赖注射(DI)的分类。

    6.1 从创建对象谈起

    我们之前讲解了使用工厂方法模式创建对象,比如现在有这样的场景:Client对象需要使用Service1的execute()方法完成特定功能,而Service1的实现Service1Impl类又依赖于Service2的实现类Service2Impl, UML静态类图如图6-1所示。

    figure_0082_0055

    图6-1

    为了减少依赖,我们为Service1和Service2对象的实例化分别提供工厂方法类的实现,代码大致如下。

    figure_0082_0056

    figure_0083_0057

    于是,接口Service1和Service2工厂类的实现代码如下所示。

    figure_0083_0058

    figure_0084_0059

    这样,Client类的实现如下。

    figure_0084_0060

    我们的测试代码非常简单,如下所示。

    new Client(). doSomething();

    执行结果如下。

    Service1 is doing something.

    Service2 is doing something.