设计模式-抽象工厂模式(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;
}

在上述示例中,我们定义了抽象产品 AbstractProductA 和 AbstractProductB,以及抽象工厂 AbstractFactory。具体的产品类 ConcreteProductA1、ConcreteProductA2、ConcreteProductB1 和 ConcreteProductB2 继承自抽象产品类,并实现了具体的功能。具体的工厂类 ConcreteFactory1 和 ConcreteFactory2 继承自抽象工厂类,并用于创建相应的具体产品。

在 main 函数中,我们创建了两个具体工厂对象 factory1 和 factory2,然后通过它们创建了具体的产品对象 productA1、productA2、productB1 和 productB2。最后,我们使用这些产品对象执行相应的操作。

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

相关推荐
bigbread11 小时前
策略模式 + 工厂方法模式在项目中的实战应用
设计模式
高晶11 小时前
C 语言实现 BMS 系统中 SPI 通信协议实战指南
设计模式·程序员
代钦塔拉11 小时前
【C++/Qt 进阶】设计模式系列(2):工厂模式——从游戏角色到披萨店
c++·算法·设计模式
高晶13 小时前
2A3 单端甲类功放从零制作全攻略:电路设计、焊接调试到煲机维护一站式指南
前端·设计模式
代钦塔拉15 小时前
【C++/Qt 进阶】设计模式系列(4):原型模式——用“克隆“代替“重新构造“
c++·qt·设计模式
博风17 小时前
11、设计模式应用举例:迭代器模式:使用多个集合存储对象
设计模式·迭代器模式
日和雫1 天前
面向对象与面向过程,谁才是“银弹”?
设计模式
geovindu2 天前
rust: Iterator Pattern
开发语言·后端·设计模式·rust·行为模式·迭代器模
高晶2 天前
ARM 嵌入式 Linux 系统启动流程实战指南
设计模式·程序员
高晶2 天前
BMS 通信开发实战:从 PMBus 协议到数据采集的完整指南
设计模式·程序员