在開發 Windows 8 閱讀器專案時,電子書頁面包含圖形、圖像、文字等多種內容對象。若在渲染邏輯中直接 new 各類對象,不僅導致創建邏輯分散、難以維護,每個 new 還需配套異常處理,使代碼極其臃腫。此時,簡單工廠模式提供了「專門負責對象創建的類」這一解決思路。

Show()工廠類內部封裝 switch-case 創建邏輯,客戶端僅需調用 CreateProduct(type) 即可獲取產品對象,實現創建與使用的分離。
new 操作分散且雜亂/* Simple Factory Pattern Demo */
#include <iostream>
#include <vector>
using namespace std;
enum class ProductType { TypeA, TypeB, TypeC };
// 抽象產品
class Product { public: virtual void Show() = 0; virtual ~Product() = default; };
class ProductA : public Product { public: void Show() override { cout << "I'm ProductA" << endl; } };
class ProductB : public Product { public: void Show() override { cout << "I'm ProductB" << endl; } };
class ProductC : public Product { public: void Show() override { cout << "I'm ProductC" << endl; } };
// 簡單工廠
class Factory {
public:
Product* CreateProduct(ProductType type) {
switch (type) {
case ProductType::TypeA: return new ProductA();
case ProductType::TypeB: return new ProductB();
case ProductType::TypeC: return new ProductC();
default: return nullptr;
}
}
};
int main() {
Factory* factory = new Factory();
Product* pA = factory->CreateProduct(ProductType::TypeA);
if (pA) pA->Show();
Product* pB = factory->CreateProduct(ProductType::TypeB);
if (pB) pB->Show();
Product* pC = factory->CreateProduct(ProductType::TypeC);
if (pC) pC->Show();
delete factory;
delete pA; delete pB; delete pC;
return 0;
}
簡單工廠雖解決了創建集中化問題,但違反開閉原則:新增產品需修改工廠類源碼。此為後續工廠方法模式與抽象工廠模式演進的動力。三者關係: