当前位置: 首页 > news >正文

工厂方法模式

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

运行截图:

http://www.jsqmd.com/news/107454/

相关文章:

  • 终极串口调试工具:XCOM V2.6完整使用指南
  • 标题:MiMo-V2-Flash杀疯了:150 tokens/s,小米开源AI王炸
  • 5款AI写论文神器大比拼:虎贲等考AI凭什么C位出道?
  • EmotiVoice支持语音情感强度API动态调节
  • shell脚本-read-输入
  • 5 款 AI 写论文哪个好?深度横评后,才发现虎贲等考 AI 是学术圈隐藏的 “六边形战士”!
  • 高效部署EmotiVoice镜像,快速接入GPU算力加速语音生成
  • 虎贲等考 AI:不打扰你的原创,只照亮学术征途,陪你探索每一寸知识边疆
  • 数据治理如何真正落地?这8大案例的破局之战,就是你的避坑指南
  • Python-while循环-99乘法表
  • 让AI语音成为桥梁,而不是替代
  • EmotiVoice情感分类模型训练过程全公开
  • EmotiVoice支持自定义情感标签训练,拓展应用场景
  • Nginx缓存优化终极指南:快速提升网站性能300%
  • EmotiVoice支持中文普通话情感合成,语调自然流畅
  • DownKyi终极指南:B站视频下载与批量处理完整教程
  • 构建AI持久记忆:知识图谱存储技术深度解析
  • 3步搞定DuckDB Java连接:从零到一的实战指南
  • EmotiVoice在安静/嘈杂环境下的播放效果
  • BadDiffusion复现教程
  • EmotiVoice在直播场景的应用设想:实时生成主播语音
  • Chroma.js终极指南:如何用简单API解决复杂色彩空间转换问题
  • FusionCompute 8.0实验环境搭建实战指南
  • JupyterHub配置实战:从零到精通的5个关键步骤
  • Lemonade:本地大语言模型服务的终极指南
  • 科技不应逾越人性底线:我们的立场声明
  • Avue.js 7天精通实战手册:从零构建企业级数据管理平台
  • 深度解析Rust跨平台性能测量:从架构到实战的全面指南
  • Lime开源编辑器深度体验:从Sublime Text用户到贡献者的完整解析
  • Home Assistant Mini Graph Card 终极指南:简单快速的可视化图表卡片安装教程