新闻中心

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

2025-12-12
浏览次数:
返回列表
工厂模式的核心是封装对象创建过程,避免直接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";
    }
};

实现简单工厂类

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

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;
        }
    }
};

使用方式简洁明了:

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

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

Shoping购物网源码 0 查看详情 Shoping购物网源码
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++如何实现一个工厂模式?(设计模式示例)的详细内容,更多请关注其它相关文章!


# c++  # 魔心seo  # 珠海房地产seo  # 黄山外贸网站推广厂家  # 自己的  # 多路  # 管理机制  # 何为  # 多态  # 实现了  # 都是  # 购物网  # 如何实现  # 子类  # go  # 飞鹤营销推广方案策划  # 湖南网站首页推广  # 网站建设的参考书籍  # 精神文明网站建设内容  # 沙田家具网站推广在哪儿  # 快餐店营销推广软文  # 江苏网站建设要点 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: PHP 枚举:根据字符串获取枚举案例的策略与实现  Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性  苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】  J*aScript map 方法中处理循环元素为空数组的策略  Win11输入法不见了怎么办_Windows11恢复语言栏显示方法  Go语言中Map值调用指针接收器方法的限制与应对  谷歌google账号注册详细步骤 谷歌账号注册官方教程  在Typer应用中优雅地处理和重组任意命令行参数  Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组  蛙漫2台版漫画地址 Manwa2正版网页版链接  为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法  快手官方唯一登录入口 谨防山寨钓鱼网站  如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧  1688商家版怎样分析买家画像精准供货_1688商家版分析买家画像精准供货【供货策略】  微博网页版首页入口 微博电脑端官网登录链接  《刺客信条:影》PS5 Pro和Switch 2画面对比  J*aScript数组对象转换:按指定键分组与值收集  漫蛙Manwa2官网入口地址分享 漫蛙漫画PC版永久访问通道  火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧  树莓派传感器触发:通过Twilio API发送WhatsApp消息教程  机器学习中对数变换预测结果的反向还原  优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法  中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】  豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法  Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧  快手网页版在线登录 快手网页版官网入口快速访问  QQ邮箱登录官网首页 腾讯QQ邮箱网页入口  搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  我的世界官方游戏入口 我的世界官网平台直达链接  C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责  漫蛙漫画登录站点 漫蛙2正版漫画快速访问  Pygame教程:解决用户输入与游戏状态更新不同步问题  德邦快递查询平台 德邦快递物流信息查询入口  高德地图公交到站提醒失败如何解决 高德提醒权限设置  虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作  虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画  ArrayList与LinkedList核心操作的Big-O复杂度分析  智慧团建扫码登录入口 智慧团建扫码登录入口官网版​  解决 MongoDB 聚合查询中对象数组 _id 匹配问题  AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看  微博网页版直接访问 微博网页版账号管理快速入口  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  妖精动漫免费平台 妖精动漫官网资源观看网址  微信网页版官方入口教程 微信网页版网页版快速登录步骤  地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站  顺丰快递查询系统 官方正版查询入口  MAC怎么在地图App里使用“四处看看”_MAC体验部分城市的3D实景街景 

搜索