C++設計模式之工廠方法模式的實現及優缺點
工廠方法模式是在簡單工廠模式的缺點上進行優化的,我們都知道,在簡單工廠模式中,要去增加或者減少一個產品的類型,都需要修改工廠中的if-else判斷。這樣子顯然不符合我們代碼開發中的開閉原則,拓展起來也是非常麻煩的
工廠方法模式 = 簡單工廠模式 + “開閉原則”
定義思想:工廠父類負責定義創建產品對象的公共接口,而工廠子類則負責生成具體的產品對象,這樣做的目的就是將產品類的實例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該實例化哪一個具體產品類
優點:
- 不需要記住具體的類名,甚至連具體參數都不需要記住
- 實現瞭對象創建和使用的分離
- 系統的可擴展性變得更好,符合開閉原則
缺點:
系統中的類是成對增加,增加瞭系統的復雜度和理解度
適用場景:
- 客戶端不需要知道具體產品類的名字,隻需要知道其所對應的工廠即可
- 不關心類的創建和實現的細節
代碼實現:(手機產品)
//抽象手機 class AbstractPhone { public: virtual void ShowName() = 0; }; //華為 class Huawei : public AbstractPhone { public: virtual void ShowName() { cout << "Huawei Phone" << endl; } }; //小米 class Xiaomi : public AbstractPhone { public: virtual void ShowName() { cout << "Xiaomi Phone" << endl; } }; //蘋果 class Apple : public AbstractPhone { public: virtual void ShowName() { cout << "Apple Phone" << endl; } }; //抽象工廠 class AbstractPhoneFactory { public: virtual AbstractPhone* CreatePhone() = 0; }; //華為工廠 class HuaweiFactory : public AbstractPhoneFactory { public: virtual AbstractPhone* CreatePhone() { return new Huawei(); } }; //小米工廠 class XiaomiFactory : public AbstractPhoneFactory { public: virtual AbstractPhone* CreatePhone() { return new Xiaomi(); } }; //蘋果工廠 class AppleFactory : public AbstractPhoneFactory { public: virtual AbstractPhone* CreatePhone() { return new Apple(); } };
測試:
void test() { //創建一個工廠 AbstractPhoneFactory* factory = nullptr; //創建一個手機 AbstractPhone* phone = nullptr; //指定工廠是華為工廠 factory = new HuaweiFactory; //通過華為工廠創建一個手機 phone = factory->CreatePhone(); phone->ShowName(); delete phone; delete factory; factory = new XiaomiFactory; phone = factory->CreatePhone(); phone->ShowName(); delete phone; delete factory; factory = new AppleFactory; phone = factory->CreatePhone(); phone->ShowName(); delete phone; delete factory; }
運行結果:
總結
到此這篇關於C++設計模式之工廠方法模式的文章就介紹到這瞭,更多相關C++工廠方法模式內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!