2011-08-21 76 views
5

我對C++的開發和設計頗爲陌生,所以我提前在我的問題中道歉很模糊或結構不好。我在我的代碼中有幾個不同和不相關的層次結構,我想使用Alexandrescu描述和實現的通用工廠來實例化來自這些層次結構的對象。
我有困難的部分是初始化階段。這些類具有非常不同的初始化需求。有時初始化所需的數據可以從存儲(DB)中查找,在這種情況下,我可以將初始化過程封裝在特定類的某個Init()方法中。但是其他時候,只有在實例化的時刻才能知道數據,並且需要手動傳遞給對象。我正在努力想出一個統一的方式來做到這一點。有沒有人有任何關於解決這類問題的建議? 謝謝C++中的對象初始化和對象工廠

+0

Alexandrescu也是政策的粉絲,因此您可以爲您的工廠制定分配政策。但是,如果具體分配需求取決於運行時數據,那麼我想你無法繞過運行時切換分配器。也許註冊一個分配器回調的集合... –

+0

根本不使用工廠(以避免這些問題)。工廠可以解決一些問題,但他們很少需要 –

+0

感謝您的回覆。你能解釋一下「運行時切換分配器」的含義嗎? – stas

回答

4

你正在飛馳着Over-Engineering高速公路......頭先。

工廠很少需要,沒有兩個工廠是相似的(正如你注意到的)。

嘗試爲所有工廠提供基類是沒用的,因爲這個基類沒有明確的語義。它構建了什麼? Bird s? Car s?他們是無關的... Object s?這不是Java!

如果您希望使用工廠(出於某種原因),那麼Factory應產生一種類型的對象,所有對象都來源於一個公共基類。如果你有幾種物體,那麼你需要幾種工廠。

如果您發現工廠代碼重複,請使用模板提升公用代碼。

0

如果我猜對了,你的問題是,你不知道如何將不同的參數集傳遞給你的工廠方法。如果是這樣,我可以建議你再創建一個層次結構/讓我們稱之爲FactoryHelper。該層次結構的具體類將包含用於實例化具體類的特定數據,例如FactoryPerfectA的FactoryHelperA將包含一個字符串,ProductB的FactoryHelperB將包含int。工廠的抽象方法必須接受抽象基類 - FactoryHelper作爲參數。您的工廠的具體方法會將此參數投射到具體的FactoryHelperA或FactoryHelperB,並獲得特殊實例的specefic數據。產品

但這不是很好的設計。我想你試圖錯誤地使用工廠方法。