设计模式-抽象工厂模式(C++)

抽象工厂模式是一种设计模式,它提供了一个接口来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。下面是一个使用 C++ 实现抽象工厂模式的示例:

cpp 复制代码
// 抽象产品类
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;
}

在上述示例中,我们定义了抽象产品 AbstractProductAAbstractProductB,以及抽象工厂 AbstractFactory。具体的产品类 ConcreteProductA1ConcreteProductA2ConcreteProductB1ConcreteProductB2 继承自抽象产品类,并实现了具体的功能。具体的工厂类 ConcreteFactory1ConcreteFactory2 继承自抽象工厂类,并用于创建相应的具体产品。

main 函数中,我们创建了两个具体工厂对象 factory1factory2,然后通过它们创建了具体的产品对象 productA1productA2productB1productB2。最后,我们使用这些产品对象执行相应的操作。

通过抽象工厂模式,我们将产品的创建和使用分离,使得系统更加灵活和可扩展。当需要添加新的产品或工厂时,只需要添加相应的具体类并在工厂中进行实现,而不需要修改现有代码的其他部分。

相关推荐
晨米酱12 小时前
JavaScript 中"对象即函数"设计模式
前端·设计模式
数据智能老司机17 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机18 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机18 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机18 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
使一颗心免于哀伤18 小时前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
数据智能老司机2 天前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
数据智能老司机2 天前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
烛阴2 天前
【TS 设计模式完全指南】懒加载、缓存与权限控制:代理模式在 TypeScript 中的三大妙用
javascript·设计模式·typescript
李广坤2 天前
工厂模式
设计模式