我对c ++开发和设计很陌生,所以我在问题中提前道歉是模糊或结构不合理。我的代码中有几个不同且不相关的层次结构,我想使用Alexandrescu描述和实现的通用工厂来实例化这些层次结构中的对象。
我遇到困难的部分是初始化阶段。这些类具有非常不同的初始化需求。有时,可以从存储(DB)中查找初始化所需的数据,在这种情况下,我可以将初始化过程封装在特定类的某些Init()方法中。但有时,数据只在本地知道实例化的时刻,需要手动传递给对象。我正在努力想出一个统一的方法来做到这一点。有没有人对接近这类问题有任何意见?
感谢
答案 0 :(得分:4)
你正在冲破 Over-Engineering 高速公路......先行。
很少需要工厂,没有两个工厂是相同的(正如你所注意到的)。
尝试为所有工厂提供基类是没用的,因为这个基类没有明确的语义。它构建了什么? Bird
s? Car
s?它们是无关的...... Object
s?这不是Java!
如果您希望使用工厂(出于某种原因),那么Factory
应该生成 1 种类的对象,这些对象都来自公共基类。如果你有几种物体,那么你需要几种工厂。
如果您发现Factory代码重复,请使用模板提升公共代码。
答案 1 :(得分:0)
如果我猜对了,你的问题是你不知道如何将不同的参数集传递给你的工厂方法。如果是这样,我可以建议你创建一个更多层次结构/让我们称之为FactoryHelper。此层次结构的具体类将包含用于实例化具体类的特定数据,例如,ConcretePelctA for ConcreteProductA将包含字符串,而FactoryBelperB for ProductB将包含int。工厂的抽象方法必须接受抽象基类 - FactoryHelper作为参数。您工厂的具体方法会将此参数强制转换为具体的FactoryHelperA或FactoryHelperB,并获取specefic数据以实现specefic产品的实现
但这不是很好的设计。我猜你试图以错误的方式使用工厂方法。