設計模式學習筆記(C++實現)(三)--抽象工廠模式
阿新 • • 發佈:2019-01-30
1.抽象工廠模式簡介
- 英文名稱
Abstract Factory - 主要目的
該模式定義了一系列相關或者相互依賴物件的介面,而不用指定它們具體的類。 - 使用場景
1.一個系統需要獨立於它的產品的建立、組合和表示時;
2.一個系統要由多個產品系列中的一個來配置時;
3.當你要強調一系列相關的產品物件的設計以便進行聯合使用時;
4.當你提供一個類庫,而只想顯示它們的介面而不是實現的時候。
2.抽象工廠模式程式碼示例
- 測試平臺
1.開發語言:C++
2.開發工具:VS2015
3.作業系統:Win7 X64 相關類說明
1.AbstractFactory–抽象工廠類,定義抽象產品生產介面;
2.GamePcFatory、WorkPcFatory–具體工廠類,生成具體的產品;
3.Abstract_Cpu、Abstract_VideoCard–抽象產品類;
4.I7_8700、I5_5400、GTX_1080_Ti、GTX_1050–具體產品類,用於建立具體的產品。類圖
注意:
1.本例以電腦組裝為例,利用抽象工廠的概念,來分別組裝遊戲電腦和辦公電腦;具體程式碼
#include <iostream>
using namespace std;
//抽象CPU產品類
class Abstract_Cpu
{
};
//具體抽象CPU產品1
class I7_8700:public Abstract_Cpu
{
public:
I7_8700()
{
cout << "CPU: i7 8700" << endl;
}
};
//具體抽象CPU產品2
class I5_5400 :public Abstract_Cpu
{
public:
I5_5400()
{
cout << "CPU: i5 5400" << endl;
}
};
//抽象顯示卡產品類
class Abstract_VideoCard
{
};
//具體顯示卡產品1
class GTX_1080_Ti :public Abstract_VideoCard
{
public:
GTX_1080_Ti()
{
cout << "顯示卡:gtx 1080 ti" << endl;
}
};
//具體顯示卡產品2
class GTX_1050 :public Abstract_VideoCard
{
public:
GTX_1050()
{
cout << "顯示卡:gtx 1050" << endl;
}
};
//抽象工廠類
class AbstractFactory
{
public:
virtual Abstract_Cpu* CreateCpu() = 0; //CPU選擇抽象介面
virtual Abstract_VideoCard* CreateVideoCard() = 0; //顯示卡選擇抽象介面
};
//具體工廠類1
class GamePcFatory:public AbstractFactory
{
public:
Abstract_Cpu* CreateCpu() //CPU選擇介面
{
return new I7_8700();
}
Abstract_VideoCard* CreateVideoCard() //顯示卡選擇介面
{
return new GTX_1080_Ti();
}
};
//具體工廠類2
class WorkPcFatory :public AbstractFactory
{
public:
Abstract_Cpu* CreateCpu() //CPU選擇介面
{
return new I5_5400();
}
Abstract_VideoCard* CreateVideoCard() //顯示卡選擇介面
{
return new GTX_1050();
}
};
int main()
{
//組裝遊戲電腦
cout << "組裝遊戲電腦,配置如下:" << endl;
AbstractFactory* pFactory1 = new GamePcFatory();
if (NULL != pFactory1)
{
//組裝CPU
Abstract_Cpu* pCpu1 = pFactory1->CreateCpu();
//組裝顯示卡
Abstract_VideoCard* pVideoCard1 = pFactory1->CreateVideoCard();
delete pCpu1;
pCpu1 = NULL;
delete pVideoCard1;
pVideoCard1 = NULL;
delete pFactory1;
pFactory1 = NULL;
}
cout << endl << "組裝辦公電腦,配置如下:" << endl;
AbstractFactory* pFactory2 = new WorkPcFatory();
if (NULL != pFactory2)
{
//組裝CPU
Abstract_Cpu* pCpu2 = pFactory2->CreateCpu();
//組裝顯示卡
Abstract_VideoCard* pVideoCard2 = pFactory2->CreateVideoCard();
delete pCpu2;
pCpu2 = NULL;
delete pVideoCard2;
pVideoCard2 = NULL;
delete pFactory2;
pFactory2 = NULL;
}
getchar();
return 0;
}
- 輸出結果
參考文獻:
1.《設計模式:可複用面向物件軟體的基礎》