Design patterns 仅通过工厂DP实例化所有类有什么好处?

Design patterns 仅通过工厂DP实例化所有类有什么好处?,design-patterns,oop,factory,Design Patterns,Oop,Factory,可能重复: 仅通过工厂DP实例化所有类有什么好处 就我们所知,当您必须从类似对象的列表中进行选择以执行某些任务时,工厂是好的,比如说像翻译类(英语->法语,阿拉伯语->希伯来语…) 但是,当您确实有一个可能的选择时,没有理由用工厂方法模糊/抽象逻辑 有什么见解吗?您可能不希望所有的类都来自手工编写的工厂。依赖注入可能更有用,您可以编写对象,您使用的任何DI框架都可以为您填充对象。如果充分利用DI,代码中的“新”调用数量将大大减少 我们使用了很多和,但也有很多其他选项。您可能不希望所有类都来自手

可能重复:

仅通过工厂DP实例化所有类有什么好处

就我们所知,当您必须从类似对象的列表中进行选择以执行某些任务时,工厂是好的,比如说像翻译类(英语->法语,阿拉伯语->希伯来语…) 但是,当您确实有一个可能的选择时,没有理由用工厂方法模糊/抽象逻辑


有什么见解吗?

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


我们使用了很多和,但也有很多其他选项。

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


我们使用了很多,但也有很多其他的选择。

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


使用工厂是实现这一点的一种选择,更好的方法是使用依赖项注入容器。有相当多的开源容器-选择一个适合您的需要

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


使用工厂是实现这一点的一种选择,更好的方法是使用依赖项注入容器。有相当多的开源容器-选择一个适合您的需要

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

工厂方法的一个一般优点是,您可以在公共接口后面控制对象的创建。因此,在不影响客户端代码的情况下,您可以在以后添加缓存机制之类的东西。

工厂模式的一个用途是克服Java和C#等语言中存在的问题:

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

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


  • 工厂模式的一个用途是克服Java和C#等语言中存在的问题:

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

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


  • 首先简单地编写代码:使用构造函数。如果您发现构造器限制了您以后的使用,请在此时重构以使用工厂。避免推测性设计:它增加了复杂性,但实际价值很小。

    首先简单地编写代码:使用构造函数。如果您发现构造器限制了您以后的使用,请在此时重构以使用工厂。避免推测性设计:它增加了复杂性,但实际价值很小。

    在SO上检查此问题:在SO上检查此问题: