首页 > 后端开发 > C++ > 正文

c++怎么实现一个工厂模式_工厂设计模式实现

裘德小鎮的故事
发布: 2025-10-10 11:56:02
原创
188人浏览过
简单工厂通过单一工厂类创建具体产品,适合产品固定的场景;工厂方法利用多态和继承,新增产品无需修改原有代码,更符合开闭原则,适用于需灵活扩展的场合。

c++怎么实现一个工厂模式_工厂设计模式实现

工厂模式是一种常见的创建型设计模式,用来解耦对象的创建过程。在C++中,通过基类指针和多态特性可以很好地实现工厂模式。下面介绍一个简单工厂模式和一个更灵活的工厂方法模式的实现方式。

简单工厂模式

简单工厂模式通过一个单独的工厂类来决定创建哪种具体产品。它不是GoF23种设计模式之一,但非常实用。

步骤:

  • 定义一个产品基类(抽象接口)
  • 派生多个具体产品类
  • 创建一个工厂类,提供一个静态方法根据参数生成具体产品
// 产品基类
class Product {
public:
    virtual ~Product() = default;
    virtual void use() const = 0;
};

// 具体产品A
class ConcreteProductA : public Product {
public:
    void use() const override {
        std::cout     }
};

// 具体产品B
class ConcreteProductB : public Product {
public:
    void use() const override {
        std::cout     }
};

// 工厂类
class Factory {
public:
    enum ProductType {
        TYPE_A,
        TYPE_B
    };

    static std::unique_ptr createProduct(ProductType type) {
        switch (type) {
            case TYPE_A:
                return std::make_unique();
            case TYPE_B:
                return std::make_unique();
            default:
                throw std::invalid_argument("Unknown product type");
        }
    }
};

// 使用示例
int main() {
    auto product = Factory::createProduct(Factory::TYPE_A);
    product->use(); // 输出: Using Product A
    return 0;
}

工厂方法模式

工厂方法模式将对象的创建延迟到子类,每个子类决定实例化哪一个具体产品。这是GoF正式定义的工厂模式。

设计师AI工具箱
设计师AI工具箱

最懂设计师的效率提升平台,实现高效设计出图和智能改图,室内设计,毛坯渲染,旧房改造 ,软装设计

设计师AI工具箱 124
查看详情 设计师AI工具箱

立即学习C++免费学习笔记(深入)”;

结构:

  • 定义一个创建对象的接口(虚函数)
  • 让子类决定实例化哪个类
// 抽象工厂基类
class Creator {
public:
    virtual ~Creator() = default;
    virtual std::unique_ptr createProduct() const = 0;
};

// 创建具体产品A的工厂
class ConcreteCreatorA : public Creator {
public:
    std::unique_ptr createProduct() const override {
        return std::make_unique();
    }
};

// 创建具体产品B的工厂
class ConcreteCreatorB : public Creator {
public:
    std::unique_ptr createProduct() const override {
        return std::make_unique();
    }
};

// 使用方式
int main() {
    std::unique_ptr creator = std::make_unique();
    auto product = creator->createProduct();
    product->use(); // 输出: Using Product A
    return 0;
}

关键点说明

为何使用智能指针?
使用std::unique_ptr能自动管理内存,避免手动delete,提升安全性和代码清晰度。

多态是核心
基类指针指向派生类对象,通过虚函数调用实际类型的实现,这是工厂模式能工作的基础。

扩展性考虑
简单工厂在新增产品时需要修改工厂代码,违反开闭原则;工厂方法通过新增工厂类即可支持新产品,更符合设计原则。

基本上就这些。两种方式各有用途:简单工厂适合产品种类固定的场景,工厂方法更适合需要灵活扩展的情况。

以上就是c++++怎么实现一个工厂模式_工厂设计模式实现的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号