首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 設計模式:抽象工廠模式深度解析(一)—— 產品族與產品等級結構

     編輯:C++ 入門

動機:從單一產品到產品族

工廠方法模式針對單一產品等級結構(如只生產電視機)。但現實中,工廠往往生產多個相關產品(電視機、冰箱、空調),構成產品族。抽象工廠模式應運而生。

核心概念

關鍵點:一個工廠(如海爾工廠)負責創建一個產品族中的所有產品(各等級結構各一個)。

案例:跨平台代碼比較工具

需求:Windows/Linux 平台下,比較 Cpp/Java 兩種語言代碼。
產品等級結構:CppCodeStyle(Windows/Linux 實現)、JavaCodeStyle(Windows/Linux 實現)。
產品族:WindowsCpp + WindowsJava、LinuxCpp + LinuxJava。

簡單工廠的缺陷

若用兩個獨立工廠 CppFactory、JavaFactory,客戶端可任意組合:

CppCodeStyle* cpp = CppFactory::Create("Windows");
JavaCodeStyle* java = JavaFactory::Create("Linux"); // 錯誤組合!

這違背了「平台一致性」業務規則。

抽象工廠模式結構

// 抽象產品
class CppCodeStyle { virtual void compare() = 0; };
class JavaCodeStyle { virtual void compare() = 0; };

// 具體產品
class WindowsCpp : public CppCodeStyle { void compare() { ... } };
class LinuxCpp : public CppCodeStyle { void compare() { ... } };
class WindowsJava : public JavaCodeStyle { void compare() { ... } };
class LinuxJava : public JavaCodeStyle { void compare() { ... } };

// 抽象工廠
class CodeStyleFactory {
public:
    virtual CppCodeStyle* createCpp() = 0;
    virtual JavaCodeStyle* createJava() = 0;
};

// 具體工廠(每個工廠對應一個產品族)
class WindowsFactory : public CodeStyleFactory {
    CppCodeStyle* createCpp() { return new WindowsCpp(); }
    JavaCodeStyle* createJava() { return new WindowsJava(); }
};
class LinuxFactory : public CodeStyleFactory {
    CppCodeStyle* createCpp() { return new LinuxCpp(); }
    JavaCodeStyle* createJava() { return new LinuxJava(); }
};

// 客戶端使用
void client(CodeStyleFactory* factory) {
    CppCodeStyle* cpp = factory->createCpp();
    JavaCodeStyle* java = factory->createJava();
    // 保證 cpp 和 java 同屬一個平台
}

模式優勢

  1. 封裝產品族創建邏輯:客戶端無需知道具體類名
  2. 強制一致性:同一工廠創建的產品必然屬於同一族
  3. 易於擴展新族:添加 MacFactory 只需新增類,不修改現有代碼(開閉原則)
  4. 難以擴展新等級:若需添加 PythonCodeStyle,需修改抽象工廠接口及所有具體工廠(缺點)

適用場景

  • 系統有多個產品族,每次只使用其中一族
  • 產品之間有強依賴/一致性要求
  • 提供產品庫,只暴露接口不暴露實現

對比總結

概念定義例子
產品等級結構同類產品的繼承體系抽象電視機 → 海爾/創維/TCL電視機
產品族不同等級結構中、邏輯相關的產品組合海爾電視機 + 海爾冰箱 + 海爾空調 = 海爾產品族
模式產品等級數工廠等級數創建責任
簡單工廠11單一類集中創建
工廠方法1多每個具體工廠創建一個產品
抽象工廠多多每個具體工廠創建一族產品

抽象工廠是工廠模式中最抽象、最通用的形式,通過「工廠對象」統一管理「產品族」創建,是大型系統模塊解耦的關鍵模式之一。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved