工廠方法模式是一種創建型設計模式,它定義一個用於創建對象的接口,讓子類決定實例化哪個類。工廠方法使一個類的實例化延遲到其子類,從而實現了解耦合與擴展性的平衡。
雖然原文未給出具體類圖,但典型結構包含:
// 抽象產品
class Product {
public:
virtual ~Product() = default;
virtual void use() = 0;
};
// 具體產品 A
class ConcreteProductA : public Product {
public:
void use() override { std::cout << "使用產品 A\n"; }
};
// 具體產品 B
class ConcreteProductB : public Product {
public:
void use() override { std::cout << "使用產品 B\n"; }
};
// 抽象工廠
class Factory {
public:
virtual ~Factory() = default;
virtual std::unique_ptr createProduct() = 0;
};
// 具體工廠 A
class ConcreteFactoryA : public Factory {
public:
std::unique_ptr createProduct() override {
return std::make_unique();
}
};
// 具體工廠 B
class ConcreteFactoryB : public Factory {
public:
std::unique_ptr createProduct() override {
return std::make_unique();
}
};
// 客戶端代碼
void clientCode(Factory& factory) {
auto product = factory.createProduct();
product->use();
}
通過工廠方法模式,我們將對象創建的邏輯封裝在具體工廠中,客戶端只需依賴抽象工廠接口,極大地提高了代碼的可維護性與擴展性。