1. 程式人生 > >設計模式學習筆記(C++實現)(三)--抽象工廠模式

設計模式學習筆記(C++實現)(三)--抽象工廠模式

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.《設計模式:可複用面向物件軟體的基礎》