news 2026/4/8 17:51:39

工厂方法模式

作者头像

张小明

前端开发工程师

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/4/8 0:24:10

Lemonade:本地大语言模型服务的终极指南

在当今人工智能快速发展的时代&#xff0c;本地部署大语言模型已成为开发者和研究者的重要需求。Lemonade项目正是为此而生&#xff0c;它提供了一个功能强大的本地LLM服务器&#xff0c;特别支持NPU硬件加速&#xff0c;让您在个人电脑上就能高效运行各种语言模型。 【免费下载…

作者头像 李华
网站建设 2026/4/8 10:25:23

思维链技术:让AI推理过程从黑箱变透明的革命性突破

思维链技术&#xff1a;让AI推理过程从黑箱变透明的革命性突破 【免费下载链接】fabric fabric 是个很实用的框架。它包含多种功能&#xff0c;像内容总结&#xff0c;能把长文提炼成简洁的 Markdown 格式&#xff1b;还有分析辩论、识别工作故事、解释数学概念等。源项目地址&…

作者头像 李华
网站建设 2026/4/1 23:15:57

告别等待!3步调优Monaco Editor代码提示响应速度

告别等待&#xff01;3步调优Monaco Editor代码提示响应速度 【免费下载链接】monaco-editor A browser based code editor 项目地址: https://gitcode.com/gh_mirrors/mo/monaco-editor 还在为输入代码时提示框迟迟不出现而烦恼吗&#xff1f;&#x1f914; 今天我们就…

作者头像 李华
网站建设 2026/4/2 1:55:12

优秀学员统计 100分(python、java、c++、js、c)

题目 公司某部门软件教导团正在组织新员工每日打卡学习活动&#xff0c;他们开展这项学习活动已经一个月了&#xff0c;所以想统计下这个月优秀的打卡员工。每个员工会对应一个id&#xff0c;每天的打卡记录记录当天打卡员工的id集合&#xff0c;一共30天。请你实现代码帮助统计…

作者头像 李华
网站建设 2026/4/8 17:20:57

两数之和 暴力解法

在 LeetCode 的入门题目中&#xff0c;“两数之和”&#xff08;Two Sum&#xff09;绝对是绕不开的经典。这道题看似简单&#xff0c;却能帮我们夯实数组遍历、条件判断等基础编程能力。今天就来聊聊这道题的暴力解法思路&#xff0c;以及完整的 C 实现。题目回顾给定一个整数…

作者头像 李华