Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 如果要创建的对象需要另一个对象,工厂是否应该使用另一个工厂?_Design Patterns_Factory Pattern - Fatal编程技术网

Design patterns 如果要创建的对象需要另一个对象,工厂是否应该使用另一个工厂?

Design patterns 如果要创建的对象需要另一个对象,工厂是否应该使用另一个工厂?,design-patterns,factory-pattern,Design Patterns,Factory Pattern,如果我有一个工厂创建了一个需要另一个对象实例的对象,我应该使用另一个工厂来负责第二个对象的创建,还是原始工厂来处理这个问题?这是大多数设计问题的答案,这取决于具体情况。如果实际上其他对象的任何实例都可以用来初始化第一个对象,那么可能是的。这将使它们更加独立,但您的代码将增长(通常的权衡)。另一方面,如果特定对象需要特定的其他对象,那么这应该是一个工厂(或抽象工厂)它完全取决于第二个对象的性质。它“属于”这个工厂吗?如果是这样,那么这个工厂应该处理它。如果没有,也许另一家工厂(或者完全其他的工厂)

如果我有一个工厂创建了一个需要另一个对象实例的对象,我应该使用另一个工厂来负责第二个对象的创建,还是原始工厂来处理这个问题?

这是大多数设计问题的答案,这取决于具体情况。如果实际上其他对象的任何实例都可以用来初始化第一个对象,那么可能是的。这将使它们更加独立,但您的代码将增长(通常的权衡)。另一方面,如果特定对象需要特定的其他对象,那么这应该是一个工厂(或抽象工厂)

它完全取决于第二个对象的性质。它“属于”这个工厂吗?如果是这样,那么这个工厂应该处理它。如果没有,也许另一家工厂(或者完全其他的工厂)应该做这项工作


这类问题的诀窍在于知道什么时候应该忽略软件工程的规则。

正如另外两个答案所述,这取决于您需要的抽象级别。考虑可测试性和可扩展性。如果第二个对象打算通过工厂方法创建,则为“是”。您可以同时编织这两种图案。就像你最初想要的那样对待它


如果你想从我这里得到更详细的答案,请添加更多细节

这可能取决于对象如何相互依赖。一般来说,我不会过度使用工厂。阅读以下关于工厂的文章并没有什么坏处: