抽象工廠模式是一種設計模式,它提供了一個接口來創建一系列相關或相互依賴的對象,而無需指定它們具體的類。下面是一個使用 C++ 實現抽象工廠模式的示例:
// 抽象產品類
class AbstractProductA {
public:virtual void DoSomething() = 0;
};class AbstractProductB {
public:virtual void DoSomething() = 0;
};// 抽象工廠類
class AbstractFactory {
public:virtual AbstractProductA* CreateProductA() = 0;virtual AbstractProductB* CreateProductB() = 0;
};// 具體產品 A1 類
class ConcreteProductA1 : public AbstractProductA {
public:void DoSomething() override {std::cout << "ConcreteProductA1::DoSomething()" << std::endl;}
};// 具體產品 A2 類
class ConcreteProductA2 : public AbstractProductA {
public:void DoSomething() override {std::cout << "ConcreteProductA2::DoSomething()" << std::endl;}
};// 具體產品 B1 類
class ConcreteProductB1 : public AbstractProductB {
public:void DoSomething() override {std::cout << "ConcreteProductB1::DoSomething()" << std::endl;}
};// 具體產品 B2 類
class ConcreteProductB2 : public AbstractProductB {
public:void DoSomething() override {std::cout << "ConcreteProductB2::DoSomething()" << std::endl;}
};// 具體工廠類
class ConcreteFactory1 : public AbstractFactory {
public:AbstractProductA* CreateProductA() override {return new ConcreteProductA1();}AbstractProductB* CreateProductB() override {return new ConcreteProductB1();}
};class ConcreteFactory2 : public AbstractFactory {
public:AbstractProductA* CreateProductA() override {return new ConcreteProductA2();}AbstractProductB* CreateProductB() override {return new ConcreteProductB2();}
};int main() {// 創建具體工廠對象AbstractFactory* factory1 = new ConcreteFactory1();AbstractFactory* factory2 = new ConcreteFactory2();// 通過工廠創建產品AbstractProductA* productA1 = factory1->CreateProductA();AbstractProductA* productA2 = factory2->CreateProductA();AbstractProductB* productB1 = factory1->CreateProductB();AbstractProductB* productB2 = factory2->CreateProductB();// 使用產品productA1->DoSomething();productA2->DoSomething();productB1->DoSomething();productB2->DoSomething();// 釋放資源delete productA1;delete productA2;delete productB1;delete productB2;delete factory1;delete factory2;return 0;
}
在上述示例中,我們定義了抽象產品?AbstractProductA
?和?AbstractProductB
,以及抽象工廠?AbstractFactory
。具體的產品類?ConcreteProductA1
、ConcreteProductA2
、ConcreteProductB1
?和?ConcreteProductB2
?繼承自抽象產品類,并實現了具體的功能。具體的工廠類?ConcreteFactory1
?和?ConcreteFactory2
?繼承自抽象工廠類,并用于創建相應的具體產品。
在?main
?函數中,我們創建了兩個具體工廠對象?factory1
?和?factory2
,然后通過它們創建了具體的產品對象?productA1
、productA2
、productB1
?和?productB2
。最后,我們使用這些產品對象執行相應的操作。
通過抽象工廠模式,我們將產品的創建和使用分離,使得系統更加靈活和可擴展。當需要添加新的產品或工廠時,只需要添加相應的具體類并在工廠中進行實現,而不需要修改現有代碼的其他部分。