2011-09-13 54 views
1

您能否简要解释一下:工厂设计模式中的依赖注入主要有哪些不同?工厂设计模式的主要区别在于依赖注入吗?

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

感谢

+0

依赖注入的语义因每个框架而异,不能很容易地演示,尽管它基本上是为你定义实例的代码。使用搜索引擎很容易找到[工厂模式](http://en.wikipedia.org/wiki/Factory_method_pattern)代码示例。此外,许多** DI **框架严重依赖于创建模式,如**工厂模式**。 –

+0

[DI和工厂模式之间有什么区别?]的可能的重复(http://stackoverflow.com/questions/2598659/whats-the-difference-between-di-and-factory-patterns) –

回答

2

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

Car car = CarFactory.getCarByModel(LUXURY); 

然而,有责任传递所需的对象委托给它知道如何创建对象(通过读取已定义的配置),并将其提供给一些外部(容器居多)实体来电者默默地。

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

同样的目标与两个模式实现的,它只是你所拥有,而与DI您使用现有的DI框架来为你做这项工作写代码的工厂设计模式,简单地做配置的依赖关系。有了工厂模式,你必须为你编写工厂类。

+0

依赖注入是一种方式设计课程并且不需要容器。容器恰好是处理构建对象图的一种便捷方式。 – ColinD

2

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

依赖注入更进一步到完全抽象掉的实例化逻辑,只要你的等级有关。你的代码需要关心的是声明他们需要的依赖关系,而不会打扰他们来自哪里。

对于一个很好的深入指导,请参阅Inversion of Control Containers and the Dependency Injection pattern