1

可能重复:
使用工厂而不是构造函数来创建对象的阈值是多少?

仅通过 Factory DP 实例化我的所有类有什么好处?

据了解,当您必须从类似对象列表中进行选择来执行某些任务时,工厂是好的,比如说翻译类(英语->法语,阿拉伯语->希伯来语......)但是当您真的有一个可能的时候选项,没有理由用工厂方法模糊/抽象逻辑。

有什么见解吗?

4

5 回答 5

2

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

于 2009-02-21T20:00:51.877 回答
2

首先简单地编写代码:使用构造函数。如果您发现构造函数稍后会限制您,请在此时重构以使用工厂。避免投机性设计:它增加了复杂性而几乎没有真正的价值。

于 2009-02-23T16:17:08.653 回答
1

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

我们经常使用SpringSpring.NET,但也有许多其他选项。

于 2009-02-21T19:56:32.700 回答
1

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

使用工厂是一种选择,更好的是使用依赖注入容器。开源容器很少——选择一个适合您需求的容器。

于 2009-02-21T19:57:06.800 回答
1

工厂模式的一种用途是克服您在 Java 和 C# 等语言中发现的构造函数限制

  1. 构造函数只能返回其关联类的实例,而不能返回子类型——即使根据定义,子类型是可以接受的。

  2. 构造函数必须始终返回一个新对象,而不是以前分配的对象。这可能很烦人——例如,实际上没有必要拥有多个相等的不可变对象的实例。

于 2009-02-23T02:32:03.753 回答