news 2026/5/25 11:14:51

工厂方法模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
工厂方法模式

factory.h

#ifndef FACTORY_H #define FACTORY_H #include <QString> //工厂 class Factory { public: Factory(){}; // FruitFactory* p = new AppleFactory(); // // ... // delete p; // 注意:是通过基类指针删子类对象 // 如果 FruitFactory 的析构函数不是 virtual: // delete p; 只会调用 FruitFactory 的析构函数 // 不会调用 AppleFactory 的析构函数 // 结果是:AppleFactory 里自己管理的资源(比如 new 出来的内存、打开的文件、锁等)不会被释放,行为是未定义的(UB),最常见就是泄漏。 virtual ~Factory()=default; // 类型方法:返回自己的工厂类型 virtual QString getType() const = 0; }; //苹果 class AppleFactory:public Factory { public: AppleFactory(){}; QString getType()const override{ return "apple"; } }; //香蕉 class BananaFactory:public Factory { public: BananaFactory(){}; QString getType()const override{ return "banana"; } }; //葡萄 class GrapeFactory:public Factory { public: GrapeFactory(){}; QString getType()const override{ return "grape"; } }; #endif // FACTORY_H

mainwindow.h

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QDebug> #include "factory.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h" #include "ui_mainwindow.h" #include <QVector> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); AppleFactory *apple=new AppleFactory(); BananaFactory *banana=new BananaFactory(); GrapeFactory *grape=new GrapeFactory(); Factory *f1=apple; Factory *f2=banana; Factory *f3=grape; QVector<Factory*> vec; vec.push_back(f1); vec.push_back(f2); vec.push_back(f3); for (auto item:vec) { qDebug()<<item->getType(); } delete apple; delete banana; delete grape; } MainWindow::~MainWindow() { delete ui; }

运行截图:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 14:53:25

数据治理如何真正落地?这8大案例的破局之战,就是你的避坑指南

我们都知道数据治理很重要&#xff0c;但一提到如何落地&#xff0c;很多人都会陷入“道理都懂&#xff0c;却依然做不好”的困境。真正的难点在于&#xff0c;不同行业、不同规模、不同痛点的企业&#xff0c;该如何找到那条专属的实施路径&#xff1f;亿信华辰新书《数据治理…

作者头像 李华
网站建设 2026/5/26 4:26:42

EmotiVoice在语音广告制作中的高效应用案例

EmotiVoice在语音广告制作中的高效应用 在数字营销的浪潮中&#xff0c;品牌与用户之间的每一次触达都变得愈发珍贵。尤其是在短视频、社交媒体和电商平台主导流量入口的今天&#xff0c;一条30秒的语音广告可能决定一次冲动消费是否发生。然而&#xff0c;传统语音广告制作却仍…

作者头像 李华
网站建设 2026/5/26 4:27:52

科技不应逾越人性底线:我们的立场声明

科技不应逾越人性底线&#xff1a;我们的立场声明 在某次深夜调试语音助手时&#xff0c;我听到一段由AI生成的“愤怒”语音——语速急促、音调尖锐&#xff0c;几乎与真人无异。那一刻&#xff0c;我没有感到技术突破的欣喜&#xff0c;反而心头一紧&#xff1a;如果这声音被用…

作者头像 李华
网站建设 2026/5/26 4:27:15

Lime开源编辑器深度体验:从Sublime Text用户到贡献者的完整解析

Lime开源编辑器深度体验&#xff1a;从Sublime Text用户到贡献者的完整解析 【免费下载链接】lime Open source API-compatible alternative to the text editor Sublime Text 项目地址: https://gitcode.com/gh_mirrors/li/lime 作为一名长期使用Sublime Text的开发者&…

作者头像 李华
网站建设 2026/5/26 4:28:20

ThingsBoard物联网平台Vue3前端开发实战指南

ThingsBoard物联网平台Vue3前端开发实战指南 【免费下载链接】thingsboard-ui-vue3 本项目为基于Vue3开发的 ThingsBoard 前台 ,AntDesginVue、VbenVueAdmin、AntV X6、规则链代码已全部开放、ThingsBoard3.x持续更新中 项目地址: https://gitcode.com/oliver225/thingsboard…

作者头像 李华
网站建设 2026/5/25 11:39:53

智能机器人云平台集成:从零到一的实战部署指南

智能机器人云平台集成&#xff1a;从零到一的实战部署指南 【免费下载链接】ZeroBot-Plugin 基于 ZeroBot 的 OneBot 插件 项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroBot-Plugin 还在为多平台云服务管理而头疼吗&#xff1f;每天要在AWS、Azure、GCP之间反…

作者头像 李华