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

C++如何实现一个工厂模式?(设计模式示例)

裘德小鎮的故事
发布: 2025-12-12 23:09:07
原创
877人浏览过
工厂模式的核心是封装对象创建过程,避免直接new;C++中常用简单工厂和工厂方法模式;通过抽象产品接口Product及ConcreteProductA等具体实现,实现多态与解耦。

c++如何实现一个工厂模式?(设计模式示例)

工厂模式的核心是把对象的创建过程封装起来,让调用方不直接 new 具体类,而是通过一个统一接口获取实例。C++ 中常用的是简单工厂(非 GoF 标准但实用)和工厂方法(标准 GoF 模式),下面用一个清晰、可运行的例子说明。

定义抽象产品接口

所有具体产品都要继承这个基类,保证多态性:

class Product {
public:
    virtual ~Product() = default;
    virtual void operation() const = 0;
};
登录后复制

实现多个具体产品

每个子类提供自己的行为逻辑:

class ConcreteProductA : public Product {
public:
    void operation() const override {
        std::cout << "ConcreteProductA executed.\n";
    }
};

class ConcreteProductB : public Product {
public:
    void operation() const override {
        std::cout << "ConcreteProductB executed.\n";
    }
};
登录后复制

实现简单工厂类

工厂负责根据参数决定创建哪个具体类型,返回智能指针更安全:

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

Shoping购物网源码
Shoping购物网源码

该系统采用多层模式开发,这个网站主要展示女装的经营,更易于网站的扩展和后期的维护,同时也根据常用的SQL注入手段做出相应的防御以提高网站的安全性,本网站实现了购物车,产品订单管理,产品展示,等等,后台实现了动态权限的管理,客户管理,订单管理以及商品管理等等,前台页面设计精致,后台便于操作等。实现了无限子类的添加,实现了动态权限的管理,支持一下一个人做的辛苦

Shoping购物网源码 0
查看详情 Shoping购物网源码
class SimpleFactory {
public:
    enum class ProductType {
        A, B
    };

    static std::unique_ptr<Product> createProduct(ProductType type) {
        switch (type) {
            case ProductType::A:
                return std::make_unique<ConcreteProductA>();
            case ProductType::B:
                return std::make_unique<ConcreteProductB>();
            default:
                return nullptr;
        }
    }
};
登录后复制

使用方式简洁明了:

auto p1 = SimpleFactory::createProduct(SimpleFactory::ProductType::A);
auto p2 = SimpleFactory::createProduct(SimpleFactory::ProductType::B);
if (p1) p1->operation(); // 输出 A 的行为
if (p2) p2->operation(); // 输出 B 的行为
登录后复制

进阶:工厂方法模式(支持扩展)

当需要支持新增产品且不想修改原有工厂时,可以定义抽象工厂接口:

class Creator {
public:
    virtual std::unique_ptr<Product> factoryMethod() const = 0;
    void someOperation() const {
        auto product = factoryMethod();
        if (product) product->operation();
    }
};

class ConcreteCreatorA : public Creator {
public:
    std::unique_ptr<Product> factoryMethod() const override {
        return std::make_unique<ConcreteProductA>();
    }
};

class ConcreteCreatorB : public Creator {
public:
    std::unique_ptr<Product> factoryMethod() const override {
        return std::make_unique<ConcreteProductB>();
    }
};
登录后复制

这样每新增一类产品,只需新增一对 具体产品 + 具体工厂,完全符合开闭原则。

基本上就这些。简单工厂适合内部逻辑固定、变化少的场景;工厂方法更适合框架或插件化设计。关键点在于解耦创建与使用,避免硬编码 new,便于测试和替换实现。

以上就是C++如何实现一个工厂模式?(设计模式示例)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

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

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