目錄
簡單工廠模式定義
它又被叫做靜態工廠方法模式,是由一個工廠對象去決定創建出哪一種產品類的實例,
在工廠模式家族中,是最簡單但是很實用的模式,
優缺點
優點:根據客戶的需要,去動態實例化相關的類,去除了客戶對具體產品的依賴。
缺點:每次增加新的功能,就需要去修改現有工廠代碼,違反了“開閉原則”。
代碼實現
首先需要提供一個抽象產品類,和具體產品的實現類。並需要一個生產的工廠類。
以下以生產酒爲場景,介紹簡單工廠模式的代碼實現。
#include <iostream>
using namespace std;
//酒的抽象接口
class IWine
{
public:
virtual ~IWine(){}
virtual void createWine() = 0;
};
//啤酒
class Beer :public IWine
{
public:
void createWine()
{
cout << "生產啤酒" << endl;
}
};
//白酒
class Spirit :public IWine
{
public:
void createWine()
{
cout << "生產白酒" << endl;
}
};
//紅酒
class RedWine :public IWine
{
public:
void createWine()
{
cout << "生產紅酒" << endl;
}
};
//酒工廠 簡單工廠模式
class ProducWineFactory
{
public:
ProducWineFactory(){}
~ProducWineFactory()
{
if (wine)
{
delete wine;
wine = nullptr;
}
}
IWine * createWine(char type)
{
switch (type)
{
case 'B': //啤酒
{
wine = new Beer;
}
break;
case 'S': //白酒
{
wine = new Spirit;
}
break;
case 'R': //紅酒
{
wine = new RedWine;
}
break;
default:
break;
}
return wine;
}
private:
IWine *wine = nullptr;
};
int main() //客戶端
{
ProducWineFactory wineFactoty;
IWine *pwine = wineFactoty.createWine('R');
if (pwine)
{
pwine->createWine();
}
return 0;
}