簡介
在C 語言中,工廠方法模式允許透過工廠方法而不是建構函數來實例化物件。由於明顯的複雜性和效能問題,這種設計模式已成為爭論的主題。
反駁常見的誤解
1。構造函數總是足夠的:
雖然構造函數是必不可少的,但它們並不總是適合複雜的構造過程或構造函數重載有問題的場景(例如,表示坐標)。在這種情況下,工廠方法提供了一個可行的解決方案。
2. Java 的簡單性無法轉換為C 語言:
使用工廠進行動態分配,如Java 所示,雖然簡單,但限制了用戶動態記憶體管理。這種方法不適合嵌入式系統或首選靜態分配的場景。
3.按值返回不是通用解決方案:
雖然返回值可以促進工廠實現,但由於複製省略和不可複製對象的問題,它可能會帶來性能損失。此外,更改方法名稱以避免重疊會損害程式碼的清晰度和一致性。
4.兩階段構造有限制:
將物件分配與初始化分開可能會導致程式碼笨重,並對初始化const 成員和基類構造函數帶來挑戰。
改良的方法
為了解決這些限制,在 C中實現了更有效的工廠方法模式涉及:
對派生類型的構造函數使用靜態工廠重載:
class Base { public: Base(){} static std::shared_ptr<Base> createCartesian(float x, float y); }; class Derived:public Base { public: static std::shared_ptr<Derived> createPolar(float angle, float magnitude); };
實作「工廠工廠」類別:
class Factory { public: virtual std::shared_ptr<Base> create() = 0; }; class CartesianFactory: public Factory { public: virtual std::shared_ptr<Base> create() { return std::make_shared<Base>(x, y); // use Cartesian constructor } };
此方法:
以上是如何在C語言中有效率地實現工廠方法模式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!