design-patterns - 我应该选择依赖注入(inject)还是工厂模式

标签 design-patterns dependency-injection

我正在调查依赖注入(inject)。而且我发现:引用的大多数依赖注入(inject)的例子,我们也可以使用工厂模式来解决。

您能帮我比较一下 DI 和工厂模式之间的优缺点吗?我应该总是选择依赖注入(inject)而不是工厂模式吗?还是取决于指定的项目?

我如何知道最佳解决方案是什么?什么是最佳做法?

最佳答案

让我们看看它们之间的区别。

使用 DI,对象在外部创建并“注入(inject)”以供客户端对象使用。 注入(inject)通常通过构造函数完成。

但是,在复杂的情况下,通常会注入(inject)一个 DI 容器来创建依赖对象,包括所有的子依赖。所以它看起来像抽象工厂!

使用抽象工厂,一个具体工厂类的实例被注入(inject),依赖对象由客户端对象实例化。

所以 DI 和抽象工厂几乎相同,当您考虑到在这两种情况下,工厂对象都被传递给客户端以使其能够创建其依赖项。

仅在简单的情况下,依赖对象在外部创建并传递给客户端对象。这就是策略模式的工作原理。

由于 DI 容器现在如此流行,并且在框架中得到如此广泛的使用,它们已经有效地取代了抽象工厂,至少作为一种经常被提及的模式。 DI 容器是比抽象工厂想象的要复杂得多的实体(我相信)。

所以没有最佳实践!

关于design-patterns - 我应该选择依赖注入(inject)还是工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51833124/

相关文章:

Android 监听器模式与回调模式

c++ - 如何抽象出数学软件中的整数类型

java - 如何在运行时更改以下 bean 属性?

javascript - JavaScript中的依赖倒置原则

spring - jersey-spring3 实例化 Spring 管理的 bean (null!)

java - 确定哪些 Spring @Value 注解注入(inject)失败

c++ - 空对象模式和函数

java - 数据库关系建模

c# - 使用任务并行库进行调度

java - Jersey 配置不识别服务和 dao 类