我對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. C#初始化對象
- 6. LINQ和對象初始化
- 7. JavaScript和對象初始化
- 8. 初始化對象
- 9. 對象初始化
- 10. 初始化對象
- 11. 初始化對象
- 12. 對象初始化
- 13. 初始化父對象後初始化相關的對象
- 14. c中的對象重新初始化#
- 15. C++中的對象初始化語法
- 16. C#中的對象初始化
- 17. 在c#中初始化對象變量?
- 18. 在C++中初始化對象數組
- 19. 在C++中初始化對象
- 20. 如何在工廠更好地初始化對象?
- 21. 初始化工廠對象時遇到問題
- 22. 工廠類與對象初始化 - 試圖避免靜態
- 23. LINQ的初始化對象
- 24. 的Java初始化對象
- 25. 初始化對象的ByRef
- 26. Python的C-API對象初始化
- 27. C++堆對象的初始化
- 28. Objective-C - 初始化已經初始化的對象?
- 29. 在ASP.NET Core中使用DI初始化初始化對象的對象
- 30. C++使用返回的對象來初始化一個對象
Alexandrescu也是政策的粉絲,因此您可以爲您的工廠制定分配政策。但是,如果具體分配需求取決於運行時數據,那麼我想你無法繞過運行時切換分配器。也許註冊一個分配器回調的集合... –
根本不使用工廠(以避免這些問題)。工廠可以解決一些問題,但他們很少需要 –
感謝您的回覆。你能解釋一下「運行時切換分配器」的含義嗎? – stas