QT設計模式:建造者模式

基本概念

建造者模式是一種創建型設計模式,它允許你創建復雜對象的過程獨立于該對象的組成部分以及它們的組裝方式。這樣可以構造出不同的對象表示。

在建造者模式中,將創建對象的過程和對象的表示分離,通過一步步的構建,可以得到不同的對象。

建造者模式需要實現以下結構:

  • 指揮者(Director):負責使用建造者對象構建最終的復雜對象,它不關心具體的構建過程。
  • 建造者(Builder):定義了構建復雜對象各個部分的接口。
  • 具體建造者(Concrete Builder):實現了建造者定義的接口。
  • 產品(Product):表示被構建的復雜對象。

使用場景

  • 構建過程比較復雜時。
  • 構建過程需要獨立于對象的組成部分以及它們的裝配方式時。
  • 構建過程中的一些步驟是可選的或可變的時。
  • 構建的對象需要具有不同的表現形式時。
  • 需要將構建過程封裝在一個獨立的組件中時。

實現

使用建造者模式創建一個對話框的例子如下:

// 具體建造者(Concrete Builder)
class DialogBuilder {
public:DialogBuilder() : dialog(new QDialog) {}void setTitle(const QString& title) {dialog->setWindowTitle(title);}void setMessage(const QString& message) {QLabel* label = new QLabel(message);layout.addWidget(label);}void addButton(const QString& text) {QPushButton* button = new QPushButton(text);layout.addWidget(button);QObject::connect(button, &QPushButton::clicked, dialog, &QDialog::accept);}QDialog* getResult() {dialog->setLayout(&layout);return dialog;}private:QDialog* dialog;QVBoxLayout layout;
};// 指揮者(Director)
class DialogDirector {
public:DialogDirector(DialogBuilder* builder) : builder(builder) {}QDialog* construct(const QString& title, const QString& message, const QString& buttonText) {builder->setTitle(title);builder->setMessage(message);builder->addButton(buttonText);return builder->getResult();}private:DialogBuilder* builder;
};int main(int argc, char *argv[]) {QApplication app(argc, argv);DialogBuilder builder;DialogDirector director(&builder);// 使用指揮者構建復雜對象QDialog* dialog = director.construct("Title", "Message", "OK");dialog->show();return app.exec();
}

這個例子省略了抽象的建造者,可以創建出qt對話框。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10340.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10340.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10340.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FFmpeg常用API與示例(四)——過濾器實戰

1.filter 在多媒體處理中,filter 的意思是被編碼到輸出文件之前用來修改輸入文件內容的一個軟件工具。如:視頻翻轉,旋轉,縮放等。 語法:[input_link_label1]… filter_nameparameters [output_link_label1]… 1、視…

C++中調用python函數(VS2017+WIN10+Anaconda虛擬環境)

1.利用VS創建C空項目 step1 文件——新建——項目 step2 Visual C—— Windows桌面——Windows桌面向導 step3 選擇空項目 step4 源文件——新建項——添加 step5 Visual C——C文件(.cpp) 2.配置環境 Step1. 更換成Release與X64 Step2. 打開項目屬性&…

文本提取新技能:學會按行數批量提取,輕松應對各種需求

在數字化時代,文本處理成為我們日常生活和工作中不可或缺的一部分。無論是從網頁、文檔還是數據庫中提取信息,文本提取技能都顯得尤為重要。而按行數批量提取文本內容,更是文本處理中的一項高效且實用的技能。本文將介紹辦公提效工具如何按行…

在Spring Boot應用安裝SSL證書

目錄 前提條件 步驟一:下載SSL證書 步驟二:在Spring Boot安裝SSL證書 步驟三:驗證SSL證書是否安裝成功 前提條件 已通過數字證書管理服務控制臺簽發證書SSL證書綁定的域名已完成DNS解析,即您的域名與主機IP地址相互映射已在W…

ASP.NET學生信息管理系統

摘 要 本文介紹了在ASP.net環境下采用“自上而下地總體規劃,自下而上地應用開發”的策略開發一個管理信息系統的過程。通過分析某一學校學生管理的不足,創建了一套行之有效的計算機管理學生的方案。文章介紹了學生管理信息系統的系統分析部分&#xff0c…

微信投票源碼系統至尊版 吸粉變現功能二合一

源碼簡介 微信投票系統在營銷和社交互動中發揮著多方面的作用,它能夠提升用戶的參與度和品牌曝光度,還是一種有效的數據收集、營銷推廣和民主決策工具。 分享一款微信投票源碼系統至尊版,集吸粉變現功能二合一,全網獨家支持禮物…

已經安裝tensorflow,仍報錯No module named ‘tensorflow‘

在安裝某些python虛擬環境的教程文章中,經常看到有評論區說安裝了但是調用顯示無模塊,例如pytorch和tensorflow等等。 其實跟之前我寫過的一篇文章解決方法類似,就是python項目中需要應用哪個虛擬環境,這個項目的python解釋器就選…

企業網絡需求及適合的解決方案

近年來,企業網絡通信需求可謂五花八門,變幻莫測。它不僅為企業的生產、辦公、研發、銷售提供全面賦能,同時也讓企業業務規模變大成為了可能。 在當前的技術格局下,中大型企業常見的技術方案有很多,而同時也有各自不可替…

商務英語口語成人考級外語培訓之BECkao考級口語篇

在口語考試中,不管實際內容你能說出多少,但準備一些套話,至少還能撐撐場子你們說是不是? 內容闡述 描述事實 1.Im going to describe/present/explain/give you some information about... 2.Id like to say a few words about...…

德國儲能項目鋰電池儲能集裝箱突發火災:安全挑戰再引關注

2024年4月27日,德國尼爾莫爾商業區的一起鋰電池儲能集裝箱火災事件引起了全球關注。這起事故不僅導致兩名消防員在救援過程中受傷,更暴露了儲能系統在安全領域亟待解決的重要問題。 根據德國消防隊的出警記錄,火災發生在晚上9點前不久。消防人…

機器學習算法應用——神經網絡回歸任務、神經網絡分類任務

神經網絡回歸任務(4-3) 神經網絡回歸任務,通常指的是使用神經網絡模型進行回歸分析。回歸分析是一種統計學方法,用于研究一個或多個自變量(預測變量)與一個因變量(響應變量)之間的關…

漲薪技術 —— 搞定Appium工作中常見應用操作!

前言 Appium 是一個開源、跨平臺的自動化測試工具,用于測試原生和輕量移動應用,支持 iOS, Android 和 FirefoxOS 平臺。此工具在測試工作中也較長用到,接下來給大家介紹日常中的操作。 1、應用操作 1.1獲取應用的包名和界面名 當我們從一…

日報表定時任務優化歷程

報表需求背景 報表是一個很常見的需求,在項目中后期往往會需要加多種維度的一些統計信息,今天就來談談上線近10個月后的一次報表優化優化之路(從一天報表跑需要五分鐘,優化至秒級) 需求:對代理商進行日統計…

基礎I/O:文件系統調用接口

文章目錄 文件系統調用接口open系統調用接口和C語言封裝文件描述符fd重定向 文件系統調用接口 open NAME//打開、創建 - 打開并可能創建文件或設備open, creat - open and possibly create a file or deviceSYNOPSIS#include <sys/types.h>#include <sys/stat.h>…

【C++算法】隊列相關經典算法題

1. N叉樹的層序遍歷 首先我們遇到這個題目&#xff0c;沒有任何思路&#xff0c;我們就可以來模擬一下層序的流程&#xff0c;首先我們肯定是訪問根節點1&#xff0c;訪問之后呢就是訪問下一層的最左節點3&#xff0c;此時第一層的節點1已經訪問過了就可以不要了&#xff0c;然…

[GESP樣題 四級] 填幻方和幸運數

B3940 [GESP樣題 四級] 填幻方 題目 在一個NN 的正方形網格中&#xff0c;每個格子分別填上從 1 到 NN 的正整數&#xff0c;使得正方形中任一行、任一列及對角線的幾個數之和都相等&#xff0c;則這種正方形圖案就稱為“幻方”&#xff08;輸出樣例中展示了一個33 的幻方&am…

ICode國際青少年編程競賽- Python-4級訓練場-嵌套for循環練習

ICode國際青少年編程競賽- Python-4級訓練場-嵌套for循環練習 1、 for i in range(3):Spaceship.step(4)for j in range(4):Dev.step(2)Dev.turnRight()Spaceship.turnLeft()Spaceship.step(4)Spaceship.turnRight()2、 for i in range(4):Spaceship.step(6)for j in range(3):…

Nginx或Tengine服務器配置SSL證書

目錄 前提條件 步驟一&#xff1a;下載SSL證書 步驟二&#xff1a;在Nginx服務器安裝證書 步驟三&#xff1a;驗證SSL證書是否配置成功 前提條件 已通過數字證書管理服務控制臺簽發證書SSL證書綁定的域名已完成DNS解析&#xff0c;即您的域名與主機IP地址相互映射已在Web服…

維修Philips IU22飛利浦四維多普勒彩超診斷儀 V6-2 L12-5 C8-4V深圳捷達工控維修

專為新時代而設計。專為更多而設計。 超聲波在抗擊 COVID-19 中的成像作用不斷擴大&#xff0c;并且對血管和心臟檢查的需求不斷增加&#xff0c;因此比以往任何時候都更有價值。飛利浦的超聲產品組合&#xff08;包括 EPIQ Elite&#xff09;為一線護理人員提供了寶貴的診斷支…

Intel處理器7z/XZ遇到 The failure in hardware

最近在使用Intel 12700H混合架構處理器的時候&#xff0c;一旦使用7z或者XZ算法壓縮東西就會出現如下的報錯&#xff1a; Internal Error: The failure in hardware (RAM or CPU), OS or program在檢查排除了內存、磁盤和OS的問題后&#xff0c;最終確定為Intel CPU的問題&…