2009-02-21 20 views
1

可能重复:
What is your threshold to use factory instead of a constructor to create an object?让我的所有类只通过Factory DP实例化的好处是什么?

有什么优势,只有通过工厂DP实例化的所有我的班?

据了解,当你需要从类似对象列表中选择执行某项任务时,Factory很好,比如说翻译类(英语 - > frank,arab-> hebrew ...) 但是当你真的有一个可能的选择,没有理由用Factory方法来隐藏/抽象逻辑。

任何见解?

+0

请在SO上检查此问题:[使用工厂代替构造函数来创建对象的阈值是什么?](http://stackoverflow.com/questions/489623/what-is-your-threshold-to-使用-工厂INSTEAD-OF-A-构造函数来创建-AN-objec) – 2009-02-23 16:30:30

回答

1

你怎么知道,未来不会有其他的可能性? 更改依赖项实现的最常见原因之一是单元测试。当你为它编写单元测试时,你是否真的希望所有的依赖都使用它们的实现? 完美地写一个类时,你会声明它需要什么来完成它的工作作为构造函数中的参数,而不关心实现来自哪里。

使用工厂是这样做的一个选择,更好的办法是使用依赖注入容器。有很少的开源容器 - 选择一个适合您的需求。

1

您可能不希望所有的课程都来自手写工厂。依赖注入可能更有用,您可以编写对象,并且您使用的任何DI框架都可以为您填充对象。如果充分利用DI,代码中“新”呼叫的数量将会减少。

我们使用Spring很多,和Spring.NET,但也有许多其他选项。

2

工厂方法的一个普遍优势是您可以控制公共接口后面的对象创建。因此,在不影响客户端代码的情况下,您可以稍后添加缓存机制等内容。

1

一个使用工厂模式是为了克服你像Java和C#语言中找到constructor limitations

  1. 构造函数只能返回与其关联的类的实例,从来没有一个亚型 - 即使根据定义,子类型是可以接受的。

  2. 构造函数必须总是返回一个新的对象,而不是先前分配的对象。这可能很烦人 - 例如,真的不需要拥有多个相同的不可变对象的实例。

2

简单地写下你的代码:使用构造函数。如果你发现构造函数稍后会限制你,那么在那个时候重构使用一个工厂。避免投机设计:它增加了复杂性,但实际价值很小。

相关问题