IOC设计模式和工厂设计模式是相互独立的吗?

4

我在某个地方看到过,IOC和工厂模式不同。因为工厂设计模式更具侵入性,而依赖注入则不是这样。

有人能进一步阐述吗?

2个回答

3
是的,IoC和工厂是两个不同的东西。IoC实际上是一个更通用的术语,许多事物都可以归为IoC,因此有助于进一步确定您所指的是什么。例如,从技术上讲,任何回调或事件都被认为是IoC的实现。大多数人在谈论IoC时指的是Dependency Injection。
您可以使用工厂来实现控制反转,就像您可以使用依赖注入来实现它一样。
你可能想到的是依赖注入容器,如Unity、Windows或Ninject。DI容器有点像一个备受推崇的抽象泛型工厂,但它做了更多的事情,包括对象生命周期管理、条件绑定等等...
重要的是要将模式(IoC或DI)与实现(Factory、DI容器、Poor mans DI等)分开,即使这些实现本身也可能是模式。

2
反转控制容器主要用于控制对象的生命周期,而不是依赖注入。这就是所谓的“反转控制”。因此,在注册容器中的内容时,您总是需要指定生命周期(或者使用默认生命周期)。
然而,由于容器为您创建对象,它也可以提供依赖注入作为额外的功能,所以这确实是一种奖励。
另一方面,工厂模式应该始终创建一个新的对象。工厂模式的目的只是为了为您创建正确的实现。

1
“控制反转”中的“控制”与对象的生命周期无关,请参见http://en.wikipedia.org/wiki/Inversion_of_control。 - yegor256

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接