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

工廠方法模式 Factory Method Pattern C++ 實現

     編輯:關於C++

模式定義

定義一個創建對象的接口,讓子類決定實例化哪個類。工廠方法將實例化推遲到子類。

適用場景

  • 類不知道它必須創建的對象的類
  • 類希望由子類指定創建的對象
  • 將創建職責委託給多個輔助子類之一

角色結構

角色職責
Product定義工廠方法創建的對象接口
ConcreteProduct實現 Product 接口
Creator聲明工廠方法,返回 Product;可提供默認實現
ConcreteCreator重寫工廠方法返回 ConcreteProduct 實例

C++ 代碼實現

// 抽象產品
class Product {
public:
    virtual ~Product() = default;
    virtual void operate() = 0;
};

// 具體產品
class ConcreteProduct1 : public Product {
public:
    void operate() override { /* 產品1邏輯 */ }
};
class ConcreteProduct2 : public Product {
public:
    void operate() override { /* 產品2邏輯 */ }
};

// 抽象創建者
class Creator {
public:
    virtual ~Creator() = default;
    virtual Product* createProduct() = 0; // 工廠方法
    // 可選:提供默認創建邏輯
    // Product* createProduct() { return new ConcreteProduct1(); }
};

// 具體創建者
class ConcreteCreator1 : public Creator {
public:
    Product* createProduct() override { return new ConcreteProduct1(); }
};
class ConcreteCreator2 : public Creator {
public:
    Product* createProduct() override { return new ConcreteProduct2(); }
};

// 客戶端使用
int main() {
    Creator* c1 = new ConcreteCreator1();
    Product* p1 = c1->createProduct();
    p1->operate();
    delete p1; delete c1;

    Creator* c2 = new ConcreteCreator2();
    Product* p2 = c2->createProduct();
    p2->operate();
    delete p2; delete c2;
    return 0;
}

擴展性優勢

  • 新增產品只需添加 ConcreteProduct3 和 ConcreteCreator3
  • 現有代碼無需修改(開閉原則)
  • 客戶端針對抽象 Creator/Product 編程

與簡單工廠區別

  • 簡單工廠:單一工廠類含 switch/if 創建邏輯,違反開閉原則
  • 工廠方法:創建邏輯分散到各具體創建者,符合開閉原則
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved