我对C++的开发和设计颇为陌生,所以我提前在我的问题中道歉很模糊或结构不好。我在我的代码中有几个不同和不相关的层次结构,我想使用Alexandrescu描述和实现的通用工厂来实例化来自这些层次结构的对象。
我有困难的部分是初始化阶段。这些类具有非常不同的初始化需求。有时初始化所需的数据可以从存储(DB)中查找,在这种情况下,我可以将初始化过程封装在特定类的某个Init()方法中。但是其他时候,只有在实例化的时刻才能知道数据,并且需要手动传递给对象。我正在努力想出一个统一的方式来做到这一点。有没有人有任何关于解决这类问题的建议? 谢谢C++中的对象初始化和对象工厂
5
A
回答
4
你正在飞驰着Over-Engineering高速公路......头先。
工厂很少需要,没有两个工厂是相似的(正如你注意到的)。
尝试为所有工厂提供基类是没用的,因为这个基类没有明确的语义。它构建了什么? Bird
s? Car
s?他们是无关的... Object
s?这不是Java!
如果您希望使用工厂(出于某种原因),那么Factory
应产生一种类型的对象,所有对象都来源于一个公共基类。如果你有几种物体,那么你需要几种工厂。
如果您发现工厂代码重复,请使用模板提升公用代码。
0
如果我猜对了,你的问题是,你不知道如何将不同的参数集传递给你的工厂方法。如果是这样,我可以建议你再创建一个层次结构/让我们称之为FactoryHelper。该层次结构的具体类将包含用于实例化具体类的特定数据,例如FactoryPerfectA的FactoryHelperA将包含一个字符串,ProductB的FactoryHelperB将包含int。工厂的抽象方法必须接受抽象基类 - FactoryHelper作为参数。您的工厂的具体方法会将此参数投射到具体的FactoryHelperA或FactoryHelperB,并获得特殊实例的specefic数据。产品
但这不是很好的设计。我想你试图错误地使用工厂方法。
相关问题
- 1. 对象只能通过工厂方法初始化(Objective-c)
- 2. C#初始化对象
- 3. C#初始化对象
- 4. C++对象初始化
- 5. JavaScript和对象初始化
- 6. LINQ和对象初始化
- 7. 对象初始化
- 8. 对象初始化
- 9. 初始化对象
- 10. 初始化对象
- 11. 初始化父对象后初始化相关的对象
- 12. c中的对象重新初始化#
- 13. C#中的对象初始化
- 14. 在C++中初始化对象
- 15. 如何在工厂更好地初始化对象?
- 16. 初始化工厂对象时遇到问题
- 17. 工厂类与对象初始化 - 试图避免静态
- 18. 的Java初始化对象
- 19. LINQ的初始化对象
- 20. Python的C-API对象初始化
- 21. C++堆对象的初始化
- 22. 在ASP.NET Core中使用DI初始化初始化对象的对象
- 23. C++对象工厂函数
- 24. Swift对象初始化(类工厂方法,默认初始化,方便初始化)
- 25. Java对象初始化
- 26. Ruby对象初始化
- 27. MATLAB初始化对象
- 28. 正在初始化对象
- 29. 对象未初始化
- 30. AudioRecord对象未初始化
Alexandrescu也是政策的粉丝,因此您可以为您的工厂制定分配政策。但是,如果具体分配需求取决于运行时数据,那么我想你无法绕过运行时切换分配器。也许注册一个分配器回调的集合... –
根本不使用工厂(以避免这些问题)。工厂可以解决一些问题,但他们很少需要 –
感谢您的回复。你能解释一下“运行时切换分配器”的含义吗? – stas