在先前介紹的工廠方法模式中,每個具體工廠僅負責創建單一類型的產品。隨著業務擴展,產品族群日益豐富,若仍沿用工廠方法模式,將導致工廠類別數量激增,管理維護成本大幅上升。例如某顯示器廠商,原有工廠 A、B 分別生產非液晶與液晶電路板;後因業務擴展需生產顯示器其餘部件,若另建工廠 C、D,不僅增加廠房成本,更造成技術經驗無法複用、管理分散等弊端。
此時,抽象工廠模式應運而生——它將「生產同一產品族的多條生產線」整合至同一工廠,實現相關產品族的統一創建,既降低耦合,又提升擴展性與維護性。

圖中核心角色:
抽象工廠模式可視為多個工廠方法模式的疊加,每個具體工廠內部包含多條「生產線」(工廠方法),負責創建一組相關/依賴的產品對象。
/* Abstract Factory Pattern Demo */
#include <iostream>
using namespace std;
// 抽象產品 A
class ProductA { public: virtual void Show() = 0; };
class ProductA1 : public ProductA { public: void Show() override { cout << "I'm ProductA1" << endl; } };
class ProductA2 : public ProductA { public: void Show() override { cout << "I'm ProductA2" << endl; } };
// 抽象產品 B
class ProductB { public: virtual void Show() = 0; };
class ProductB1 : public ProductB { public: void Show() override { cout << "I'm ProductB1" << endl; } };
class ProductB2 : public ProductB { public: void Show() override { cout << "I'm ProductB2" << endl; } };
// 抽象工廠
class Factory { public: virtual ProductA* CreateProductA() = 0; virtual ProductB* CreateProductB() = 0; };
// 具體工廠 1:生產系列 1 產品
class Factory1 : public Factory {
public:
ProductA* CreateProductA() override { return new ProductA1(); }
ProductB* CreateProductB() override { return new ProductB1(); }
};
// 具體工廠 2:生產系列 2 產品
class Factory2 : public Factory {
public:
ProductA* CreateProductA() override { return new ProductA2(); }
ProductB* CreateProductB() override { return new ProductB2(); }
};
int main() {
// 使用工廠 1 創建系列 1 產品族
Factory* factory1 = new Factory1();
ProductA* pa1 = factory1->CreateProductA();
ProductB* pb1 = factory1->CreateProductB();
pa1->Show(); pb1->Show();
// 使用工廠 2 創建系列 2 產品族
Factory* factory2 = new Factory2();
ProductA* pa2 = factory2->CreateProductA();
ProductB* pb2 = factory2->CreateProductB();
pa2->Show(); pb2->Show();
// 資源釋放
delete pa1; delete pb1; delete factory1;
delete pa2; delete pb2; delete factory2;
return 0;
}