【问题标题】:What mainly differs Dependency Injection from Factory Design pattern?依赖注入与工厂设计模式的主要区别是什么?
【发布时间】:2011-09-13 20:21:12
【问题描述】:

你能简单解释一下:依赖注入与工厂设计模式的主要区别是什么?

另外:是否可以通过代码示例非常简单地演示差异?

谢谢

【问题讨论】:

标签: java .net dependency-injection factory abstract-factory


【解决方案1】:

使用工厂(或任何其他创建模式),调用者必须知道如何获取对象,并且必须在使用它之前“明确地”请求它。

Car car = CarFactory.getCarByModel(LUXURY);

而在使用 DI 时,传递所需对象的责任被委托给了一些外部(主要是容器)实体,该实体知道如何创建对象(通过读取已经定义的配置)并让调用者静默地使用它。

Car car = getCar();
void setCar(Car car){..} // container sets the car fromoutside

【讨论】:

    【解决方案2】:

    工厂模式通常用于重复创建具有可能复杂的实例化逻辑的对象实例。这样,您的类知道工厂并请求实例。

    依赖注入更进一步完全抽象出你的类所关心的实例化逻辑。您的所有代码需要关心的是声明它们需要的依赖项,而不用担心它们来自哪里。

    如需深入了解,请参阅Inversion of Control Containers and the Dependency Injection pattern

    【讨论】:

      【解决方案3】:

      两种模式都实现了相同的目标,只是在工厂设计模式中您必须编写代码,而在 DI 中,您使用现有的 DI 框架为您完成工作并简单地配置依赖项。使用工厂模式,您必须为您的类编写工厂。

      【讨论】:

      • 依赖注入是一种设计类的方式,不需要容器。容器恰好是处理构建对象图的一种便捷方式。
      猜你喜欢
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      相关资源
      最近更新 更多