C++設計模式之工廠方法模式的實現(xiàn)及優(yōu)缺點
工廠方法模式是在簡單工廠模式的缺點上進行優(yōu)化的,我們都知道,在簡單工廠模式中,要去增加或者減少一個產品的類型,都需要修改工廠中的if-else判斷。這樣子顯然不符合我們代碼開發(fā)中的開閉原則,拓展起來也是非常麻煩的
工廠方法模式 = 簡單工廠模式 + “開閉原則”
定義思想:工廠父類負責定義創(chuàng)建產品對象的公共接口,而工廠子類則負責生成具體的產品對象,這樣做的目的就是將產品類的實例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該實例化哪一個具體產品類
優(yōu)點:
- 不需要記住具體的類名,甚至連具體參數(shù)都不需要記住
- 實現(xiàn)了對象創(chuàng)建和使用的分離
- 系統(tǒng)的可擴展性變得更好,符合開閉原則
缺點:
系統(tǒng)中的類是成對增加,增加了系統(tǒng)的復雜度和理解度
適用場景:
- 客戶端不需要知道具體產品類的名字,只需要知道其所對應的工廠即可
- 不關心類的創(chuàng)建和實現(xiàn)的細節(jié)
代碼實現(xiàn):(手機產品)

//抽象手機
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()
{
//創(chuàng)建一個工廠
AbstractPhoneFactory* factory = nullptr;
//創(chuàng)建一個手機
AbstractPhone* phone = nullptr;
//指定工廠是華為工廠
factory = new HuaweiFactory;
//通過華為工廠創(chuàng)建一個手機
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++工廠方法模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

