IOC设计模式是否独立于工厂设计模式?

时间:2012-09-10 15:30:08

标签: spring design-patterns dependency-injection inversion-of-control

我在某处读到,IOC与工厂模式不同。由于工厂设计模式更具侵入性,因此不依赖于依赖注入。

有人可以详细说明这个吗?

2 个答案:

答案 0 :(得分:2)

是的,IoC和Factory是两回事。 IoC实际上是一个更通用的术语,很多东西都有资格作为IoC,所以它有助于进一步完善你所指的内容。例如,从技术上讲,任何回调或事件都被视为IoC的实现。然而,大多数人在谈论IoC时都表示依赖注入。

您可以使用Factory来实现控制反转,就像您可以使用依赖注入来实现它一样。

您可能正在考虑的是依赖注入容器,如Unity,Windows或Ninject。 DI容器是一种美化的抽象通用工厂,但它做的远不止这些,包括对象生命周期管理,条件绑定等......

将模式(IoC或DI)与实现(Factory,DI Container,Poor mans DI等)分开是很重要的,即使实现本身也可能是模式。​​

答案 1 :(得分:2)

控制容器的反转主要不用于依赖注入。让容器控制对象的生命周期。因此inversion of control

这就是为什么你总是在容器中注册东西时指定一个生命周期(或者只是使用默认生命周期)

但是,由于容器为您创建对象,因此它还可以提供依赖注入作为额外功能。所以这真是一个奖励。

另一方面,工厂模式应该始终创建一个新对象。工厂模式的目的只是为您创建正确的实现。