Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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
C++ 工厂中的工厂?_C++_Oop_Design Patterns_Factory - Fatal编程技术网

C++ 工厂中的工厂?

C++ 工厂中的工厂?,c++,oop,design-patterns,factory,C++,Oop,Design Patterns,Factory,我有具体的工厂类,它们实现了MyFactory接口。我想基于参数获取具体的factory对象。如何做到这一点 一种方法是创建工厂的工厂[FoF],FoF将是参数化工厂 有没有更优雅的方法 这是纯粹的智力练习,我在我的项目中没有遇到任何问题 如果您能够合并两层工厂,那当然是更好的解决方案。如果具有相同的生命周期,这是可能的 如果没有,那么创建一个工厂工厂就可以了。模式本身没有问题,可以嵌套模式。你甚至可以创建一个工厂的工厂的工厂的工厂(请不要),它会工作 但是,你应该为工厂工厂找到一个合适的名字,

我有具体的工厂类,它们实现了
MyFactory
接口。我想基于参数获取具体的factory对象。如何做到这一点

一种方法是创建工厂的工厂[FoF],FoF将是参数化工厂

有没有更优雅的方法


这是纯粹的智力练习,我在我的项目中没有遇到任何问题

如果您能够合并两层工厂,那当然是更好的解决方案。如果具有相同的生命周期,这是可能的

如果没有,那么创建一个工厂工厂就可以了。模式本身没有问题,可以嵌套模式。你甚至可以创建一个工厂的工厂的工厂的工厂(请不要),它会工作

但是,你应该为工厂工厂找到一个合适的名字,这样目的就清楚了。工厂工厂对我来说听起来不是个好名字。选择一个在您的问题域中传达行为的名称比一个纯粹面向模式的名称要好



编辑:有人建议您查看问题注释中的抽象工厂模式。虽然它确实是一个有用的模式,一个优秀的软件工程师应该了解它,抽象工厂不是工厂工厂工厂:模式抽象一组相关工厂,而不是创建它们。尽管如此,了解它还是会有所帮助。

我使用了一个模板来完成类似的工作,但只有当工厂只是作为创建多态类的通用方法时,这才有效。如果有任何类需要专门设置,那么您需要专门为这些情况设置模板,这可能会变得混乱。我很难想象这个“工厂工厂”要解决的是什么业务问题。一个清晰的用例或一些代码可能有助于澄清问题。@JohnZwinck说,用户在赛车游戏中选择一些自行车[有一些ID]。我想使用所选自行车的工厂,来制造自行车。我将把自行车ID传递给FoF,它将返回适当的工厂对象。返回堆上创建的
MyFactory
对象的函数可以吗?函数将获取
ID
并创建相应的
Factory
对象。您可能需要查看抽象工厂模式:我建议检查抽象工厂模式。它绝对不同于工厂工厂,但是从问题描述来看,它可能是拥有工厂工厂的一个很好的替代方案(这肯定会引起一些关注)。例如,与其参数化工厂创建,更面向对象的解决方案可以是用具体的派生工厂专门化抽象工厂。甚至可以将这两种方法结合起来。