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

【QA】建造者模式在Qt有哪些应用

#设计模式 #Qt

一、QDomDocument(XML 文档构建)

模式角色

  • Builder:QDomDocument 本身
  • Product:XML 文档对象
  • Director:用户代码通过 QDomDocument 逐步构建文档结构

示例代码

QDomDocument doc("config");
QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(instruction);

QDomElement root = doc.createElement("root");
doc.appendChild(root);

QDomElement setting = doc.createElement("setting");
root.appendChild(setting);

QDomText text = doc.createTextNode("value");
setting.appendChild(text);

QString xml = doc.toString();

二、QNetworkRequest(网络请求构建)

模式角色

  • Builder:QNetworkRequest
  • Product:完整的网络请求对象
  • Director:通过链式调用设置请求参数

示例代码

QNetworkRequest request;
request.setUrl(QUrl("https://api.example.com/data"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setRawHeader("Authorization", "Bearer token123");
request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);

三、QSqlQuery(SQL 语句构建)

模式角色

  • Builder:QSqlQuery
  • Product:数据库查询对象
  • Director:用户代码分步骤构建查询

示例代码

QSqlQuery query;
query.prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
query.bindValue(":name", "Alice");
query.bindValue(":age", 30);
query.exec();

四、自定义建造者模式实现

当需要更复杂的构建逻辑时,可以自定义建造者类:

1. 产品类

class User {
public:
    void setName(const QString &name) { m_name = name; }
    void setAge(int age) { m_age = age; }
    void setEmail(const QString &email) { m_email = email; }
private:
    QString m_name;
    int m_age;
    QString m_email;
};

2. 建造者类

class UserBuilder {
public:
    UserBuilder() : m_user(new User) {}
    UserBuilder& withName(const QString &name) { m_user->setName(name); return *this; }
    UserBuilder& withAge(int age) { m_user->setAge(age); return *this; }
    UserBuilder& withEmail(const QString &email) { m_user->setEmail(email); return *this; }
    std::unique_ptr<User> build() { return std::move(m_user); }
private:
    std::unique_ptr<User> m_user;
};

3. 使用示例

auto user = UserBuilder()
    .withName("Bob")
    .withAge(25)
    .withEmail("bob@example.com")
    .build();

五、Qt 建造者模式特点

  1. 链式调用:通过返回*this实现流畅接口(Fluent Interface)
  2. 分步构建:支持逐步设置复杂对象的各个属性
  3. 延迟构建:可以在需要时才生成最终对象
  4. 类型安全:通过泛型和模板保证构建过程的类型正确性

相关文章:

  • Advanced Intelligent Systems 软体机器手助力截肢者玩转鼠标
  • 数据库的基本概念
  • STM32 —— MCU、MPU、ARM、FPGA、DSP
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_13可展开行的固定表头表格
  • Compose 实践与探索十一 —— 其他 Modifier
  • Python中的uv run时,--with参数的作用
  • 【Rust基础】排序和分组
  • Starship:快速且高度可定制的命令行框架!!
  • 【BERT和GPT的区别】
  • 国产编辑器EverEdit - Hex Dump插件:看到文本的另一面!
  • leetcode0031 下一个排列-medium
  • 中国人工智能产业:‘价值兑现期’的新征程
  • AI赋能实时安全背带监测解决方案
  • 链表题目2(leetcode24题)交换链表里面的节点
  • S32K144入门笔记(十):TRGMUX的初始化
  • 1.备战SISAP 2025挑战:调研2024挑战
  • 快速导出接口设计表——基于DOMParser的Swagger接口详情半自动化提取方法
  • Python数据结构——二维列表
  • 柯南ED35 Hello Mr. My Yesterday日文歌词附假名注音,祭奠逝去的青春
  • Apache SkyWalking 全链路监控系统深度解析
  • 优化站点/百度统计app
  • wordpress可视化函数/深圳seo博客
  • 下载重庆人社app/百度关键词优化
  • 如何做网站联盟/班级优化大师是干什么用的
  • 网站建设比较好的/平台代运营是什么意思
  • 内容分享网站设计/免费推广网站大全下载