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

工厂模式a

在你的 TaskFactory 类中,createTask 方法被声明为 static,这是出于以下原因:

1. 工厂方法的特性

工厂方法(Factory Method)是一种设计模式,用于封装对象的创建逻辑。工厂类通常提供一个静态方法来创建对象,这样可以避免实例化工厂类本身。静态方法可以直接通过类名调用,而不需要创建类的实例。

2. 为什么使用 static

  • 无需实例化工厂类:如果 createTask 不是静态方法,那么你需要先创建一个 TaskFactory 的实例,然后才能调用 createTask 方法。使用静态方法可以直接通过类名调用,更加简洁。
  • 逻辑清晰:工厂方法的主要目的是创建对象,而不是维护任何实例状态。静态方法适合这种场景,因为它不会依赖于类的实例状态。
  • 符合工厂模式的惯例:在工厂模式中,工厂方法通常是静态的,这已经成为一种常见的编程惯例。

示例代码

以下是你的代码的完整实现,包括 TaskMetricTaskMillimeterTask 的定义:

#include <QString>
#include <iostream>

// 基类 Task
class Task {
public:
    virtual ~Task() {}
    virtual void execute() = 0;  // 纯虚函数,确保子类实现 execute 方法
};

// 子类 MetricTask
class MetricTask : public Task {
public:
    void execute() override {
        std::cout << "Executing Metric Task" << std::endl;
    }
};

// 子类 MillimeterTask
class MillimeterTask : public Task {
public:
    void execute() override {
        std::cout << "Executing Millimeter Task" << std::endl;
    }
};

// 工厂类 TaskFactory
class TaskFactory {
public:
    static Task* createTask(const QString& taskType) {
        if (taskType == "metric") {
            return new MetricTask();
        } else if (taskType == "millimeter") {
            return new MillimeterTask();
        } else {
            return nullptr;
        }
    }
};

使用示例

以下是如何使用 TaskFactory 来创建任务并执行的示例:

#include <QString>

int main() {
    // 使用工厂方法创建任务
    Task* task1 = TaskFactory::createTask("metric");
    if (task1) {
        task1->execute();  // 输出: Executing Metric Task
        delete task1;      // 释放内存
    }

    Task* task2 = TaskFactory::createTask("millimeter");
    if (task2) {
        task2->execute();  // 输出: Executing Millimeter Task
        delete task2;      // 释放内存
    }

    Task* task3 = TaskFactory::createTask("unknown");
    if (!task3) {
        std::cout << "Unknown task type" << std::endl;
    }

    return 0;
}

输出

Executing Metric Task
Executing Millimeter Task
Unknown task type

总结

  • 使用 static 的原因:工厂方法通常不需要依赖类的实例状态,因此使用静态方法可以避免实例化工厂类,使代码更加简洁和清晰。
  • 工厂模式的优点:通过工厂方法,可以将对象的创建逻辑封装起来,使得代码更加模块化,便于扩展和维护。例如,如果需要添加新的任务类型,只需在 createTask 方法中添加一个新的分支即可。

相关文章:

  • 习题4-9 打印菱形图案
  • 全分辨率免ROOT懒人精灵-自动化编程思维-设计思路-实战训练
  • Arduino、ESP32驱动BME688环境传感器(环境传感器篇)
  • 模拟curl的回调函数实现返回结构体
  • 基于Spring Boot的ONLY在线商城系统设计与实现的设计与实现(LW+源码+讲解)
  • Ubuntu xinference部署本地模型bge-large-zh-v1.5、bge-reranker-v2-m3
  • Headless Chrome 优化:减少内存占用与提速技巧
  • c++随记
  • 糖尿病大模型预测及临床应用研究智能管理系统技术文档
  • 线段树SegmentTree
  • HTML5 Audio(音频)学习笔记
  • Elasticsearch客户端工具初探--kibana
  • PyTorch处理数据--Dataset和DataLoader
  • Springboot高版本适配人大金仓
  • qtcore在docker容器中运行
  • string 的接口
  • 有额外限制的 bellman_ford 算法
  • Docker技术全景解析
  • 串行通信 与 并行通信 对比
  • 3、实际常用命令【待补充】
  • 汕头违建豪宅“英之园”将强拆,当地:将根据公告期内具体情况采取下一步措施
  • 冰雹造成车损能赔吗?如何理赔?机构答疑
  • 白玉兰奖征片综述丨动画的IP生命力
  • 国内首家破产的5A景区游客爆满,洛阳龙潭大峡谷:破产并非因景观不好
  • 微软宣布将裁员3%
  • 为证明我爸是我爸,我将奶奶告上法庭