6.2 使用工厂方法模式的问题

    大规模地使用工厂方法模式,会引起诸多问题。

    工厂类泛滥:在实际应用中,经常出现几百个像这样的服务类,如果使用工厂方法模式的话,就可能出现几百个这样的工厂类。我们不能使用静态工厂模式的理由也很简单,因为你不会知道将来会产生多少子类扩展系统。

    依赖关系复杂:往往这几百个Service对象之间存在复杂的依赖关系,工厂类的装配逻辑也随之变得十分复杂。我们为装配这些服务对象花费了很多精力,而不能很好地专注于业务功能的开发。

    不易进行单元测试:我们需要创建一些Mock对象来进行单元测试,以本例来说明,我们要测试Client的doSomething()方法,需要使用一个Service1的Mock对象,一般情况下,我们在测试时修改getService1Instance()方法,测试完成后,再改回来,这样做非常麻烦,极易出错。

    为了解决这些问题,我们先从控制反转(IoC, Inversion of Control)说起。