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
C+中的对象初始化和对象工厂+; 我对C++开发和设计很陌生,所以我在我的问题中先道歉是含糊或结构不好。我的代码中有几个不同且不相关的层次结构,我希望使用Alexandrescu描述和实现的通用工厂来实例化这些层次结构中的对象。 我遇到的困难是初始化阶段。这些类具有非常不同的初始化需求。有时可以从存储(DB)中查找初始化所需的数据,在这些情况下,我可以将初始化过程封装在特定类的某些Init()方法中。但在其他情况下,数据仅在实例化时局部已知,需要手动传递给对象。我正在努力想出一个统一的方法来做到这一点。有人对处理这类问题有什么意见吗? 谢谢_C++_Design Patterns_Initialization_Factory Pattern - Fatal编程技术网

C+中的对象初始化和对象工厂+; 我对C++开发和设计很陌生,所以我在我的问题中先道歉是含糊或结构不好。我的代码中有几个不同且不相关的层次结构,我希望使用Alexandrescu描述和实现的通用工厂来实例化这些层次结构中的对象。 我遇到的困难是初始化阶段。这些类具有非常不同的初始化需求。有时可以从存储(DB)中查找初始化所需的数据,在这些情况下,我可以将初始化过程封装在特定类的某些Init()方法中。但在其他情况下,数据仅在实例化时局部已知,需要手动传递给对象。我正在努力想出一个统一的方法来做到这一点。有人对处理这类问题有什么意见吗? 谢谢

C+中的对象初始化和对象工厂+; 我对C++开发和设计很陌生,所以我在我的问题中先道歉是含糊或结构不好。我的代码中有几个不同且不相关的层次结构,我希望使用Alexandrescu描述和实现的通用工厂来实例化这些层次结构中的对象。 我遇到的困难是初始化阶段。这些类具有非常不同的初始化需求。有时可以从存储(DB)中查找初始化所需的数据,在这些情况下,我可以将初始化过程封装在特定类的某些Init()方法中。但在其他情况下,数据仅在实例化时局部已知,需要手动传递给对象。我正在努力想出一个统一的方法来做到这一点。有人对处理这类问题有什么意见吗? 谢谢,c++,design-patterns,initialization,factory-pattern,C++,Design Patterns,Initialization,Factory Pattern,如果我猜对了,您的问题是不知道如何将不同的参数集传递给工厂方法。如果是这样,我可以建议您再创建一个层次结构/我们称之为FactoryHelper。此层次结构的具体类将包含具体类实例的特定数据,例如,ConcreteProductA的FactoryHelperA将包含字符串,ProductB的FactoryHelperB将包含int。工厂的abstract方法必须接受抽象基类-FactoryHelper作为参数。工厂的具体方法将此参数强制转换为具体的FactoryHelperA或FactoryHe

如果我猜对了,您的问题是不知道如何将不同的参数集传递给工厂方法。如果是这样,我可以建议您再创建一个层次结构/我们称之为FactoryHelper。此层次结构的具体类将包含具体类实例的特定数据,例如,ConcreteProductA的FactoryHelperA将包含字符串,ProductB的FactoryHelperB将包含int。工厂的abstract方法必须接受抽象基类-FactoryHelper作为参数。工厂的具体方法将此参数强制转换为具体的FactoryHelperA或FactoryHelperB,并获取specefic产品实例的specefic数据

但这不是很好的设计。我猜你是在试图用错误的方法来使用工厂的方法。

你正沿着一条过度工程化的公路疾驰。。。头朝前

很少需要工厂,而且没有两个工厂是相同的(正如您所注意到的)

尝试为所有工厂提供基类是无用的,因为这个基类没有明确的语义。它建造了什么<代码>鸟s<代码>汽车s?他们是无关的<代码>对象s?这不是Java

如果您希望使用工厂(出于某种原因),那么
工厂
应该生成1类的对象,所有这些对象都派生自一个公共基类。如果您有几种对象,那么您将需要几种工厂


如果您发现工厂代码重复,请使用模板提升通用代码。

Alexandrescu也是策略迷,因此您可以为工厂制定分配策略。然而,如果具体的分配需要依赖于运行时数据,那么我猜您无法绕过运行时切换分配器。也许注册一组分配器回调…只是不使用工厂(为了避免这些问题)。工厂可以解决一些问题,但实际上很少需要他们的回答。请您解释一下“运行时切换分配器”是什么意思好吗。@斯塔斯:从您的描述中不太清楚您的实际问题是什么。但是,假设您需要为一个新对象分配内存,但您只能在运行时确定是从池还是从malloc获取内存。然后,您需要一个分配器,它接受一个参数并根据该参数(例如,通过查找回调)确定如何获取内存。很难看出这是一个好的设计,但是你的描述非常模糊。。。