工厂模式演示(C++)三分钟读懂

工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需指定创建对象的具体类。工厂模式定义了一个创建对象的接口,但将具体的实例化推迟到子类中。

工厂模式主要分为三种类型:简单工厂模式、工厂方法模式和抽象工厂模式

下面是一个使用C++和Qt框架演示简单工厂模式的示例:

演示代码:

cpp 复制代码
#include <QCoreApplication>
#include <QDebug>

// 产品类
class Product {
public:
    virtual void display() = 0;
};

// 具体产品类A    继承产品类
class ConcreteProductA : public Product {
public:
    void display() override {
        qDebug() << "产品 A.";
    }
};

// 具体产品类B    继承产品类
class ConcreteProductB : public Product {
public:
    void display() override {
        qDebug() << "产品 B.";
    }
};

// 工厂类
class Factory {
public:
    // 创建产品,返回产品类指针
    virtual Product* createProduct() = 0;
};

// 具体工厂类A    继承工厂类
class ConcreteFactoryA : public Factory {
public:
    // 创建具体某一个产品 这里演示创建产品A
    Product* createProduct() override {
        return new ConcreteProductA();
    }
};

// 具体工厂类B    继承工厂类
class ConcreteFactoryB : public Factory {
public:
    Product* createProduct() override {
        return new ConcreteProductB();
    }
};

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    // 通过工厂A 创建产品A
    Factory* factoryA = new ConcreteFactoryA();
    Product* productA = factoryA->createProduct();
    productA->display();

    // 通过工厂B 创建产品B
    Factory* factoryB = new ConcreteFactoryB();
    Product* productB = factoryB->createProduct();
    productB->display();

    // 可以使用条件判断,在不同的条件下创建不同的产品
    // 对于产品来讲,只需要一个产品基类,来接收不同工厂创建的产品即可
    
    return a.exec();
}

在这个示例中,我们定义了一个产品类Product,具体产品类ConcreteProductAConcreteProductB实现了产品类的方法。工厂类Factory定义了创建产品的接口,具体工厂类ConcreteFactoryAConcreteFactoryB实现了创建具体产品的方法。

main函数中,我们创建了具体工厂对象ConcreteFactoryAConcreteFactoryB,分别使用这两个工厂来创建具体产品对象,并调用产品对象的方法进行展示。

工厂模式的优点:

  1. 封装对象的创建过程: 工厂模式将对象的创建过程封装在工厂类中,客户端无需知道具体的创建细节。

  2. 降低耦合度: 工厂模式将客户端与具体产品类解耦,客户端只需要与工厂类交互即可,可以更灵活地替换产品类。

  3. 符合开闭原则: 当需要添加新的产品类时,只需添加新的具体产品类和对应的具体工厂类,而无需修改现有代码。

工厂模式的缺点:

  1. 增加了类的数量: 工厂模式引入了额外的工厂类,可能会增加系统中类的数量,导致复杂性增加。

  2. 可能会导致工厂类过于庞大: 如果系统中存在大量的产品类,工厂类可能会变得过于庞大,不利于维护。

工厂模式适用于需要根据不同条件创建不同对象的情况,特别是当对象的创建过程比较复杂或者存在多个具体产品类时。它可以帮助我们更好地封装对象的创建过程,降低系统的耦合度,提高灵活性和可维护性。

其他工厂模式请参考:工厂模式C++实现-CSDN博客

相关推荐
书院门前细致的苹果11 分钟前
设计模式大全:单例、工厂模式、策略模式、责任链模式
设计模式·责任链模式·策略模式
MZ_ZXD0011 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
A星空1232 小时前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
凡人叶枫2 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
会叫的恐龙3 小时前
C++ 核心知识点汇总(第六日)(字符串)
c++·算法·字符串
小糯米6013 小时前
C++顺序表和vector
开发语言·c++·算法
独望漫天星辰3 小时前
C++ 多态深度解析:从语法规则到底层实现(附实战验证代码)
开发语言·c++
王老师青少年编程4 小时前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)
c++·题解·真题·csp·信奥赛·csp-s·提高组
凡人叶枫4 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
CSDN_RTKLIB4 小时前
使用三方库头文件未使用导出符号情景
c++