設計模式(9)——創建型模式之工廠方法

設計模式(9)——創建型模式之工廠方法

    • 工廠方法
      • 作用
      • 結構
      • 偽代碼
      • 適用場景

在這里插入圖片描述

工廠方法

作用

工廠方法是一種創建型設計模式,其在父類中提供一個創建對象的方法,允許子類決定實例化對象的類型。

結構

在這里插入圖片描述

  1. 產品(Product)將會對接口進行聲明。對于所有由創建者及其子類構建的對象,這些接口都是通用的。
  2. 具體產品(Concrete Products)是產品接口的不同實現。
  3. 創建者(Creator)類聲明返回產品對象的工廠方法。該方法的返回對象類型必須與產品接口相匹配。
  4. 具體創建者(Concrete Creators) 將會重寫基礎工廠方法,使其返回不同類型的產品。
    可以在創建者(Creator)中聲明抽象方法,由具體創建者(Concrete Creators)以不同的實現返回產品(Product)對象;也可以在創建者(Creator)中返回默認的產品(Product)對象。

偽代碼

以下示例演示了如何使用工廠方法開發跨平臺UI(用戶界面)組件,并同時避免客戶代碼與具體 UI 類之間的耦合。基礎對話框類使用不同的UI 組件渲染窗口。在不同的操作
系統下, 這些組件外觀或許略有不同, 但其功能保持一致。Windows 系統中的按鈕在 Linux 系統中仍然是按鈕。
在這里插入圖片描述
如果使用工廠方法,就不需要為每種操作系統重寫對話框邏輯。如果我們聲明了一個在基本對話框類中生成按鈕的工廠方法,那么我們就可以創建一個對話框子類,并使其通過工
廠方法返回Windows 樣式按鈕。子類將繼承對話框基礎類的大部分代碼,同時在屏幕上根據 Windows 樣式渲染按鈕。

// Button作為產品接口,將聲明所有具體產品都必須實現的操作。

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

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

相關文章

Docker 疑難雜癥解決指南:從入門到進階的全面剖析

Docker 作為容器化技術的代表,憑借其輕量級、可移植性和高效資源利用率,已成為開發、測試和部署應用的標準工具。然而,在實際使用中,用戶常常會遇到鏡像構建失敗、容器啟動異常、網絡配置問題等疑難雜癥。本文將從鏡像構建、容器生…

搶跑「中央計算+區域控制」市場,芯馳科技高端智控MCU“芯”升級

伴隨著整車EE架構的加速變革,中國高端車規MCU正在迎來“新格局”。 在4月23日開幕的上海國際車展期間,芯馳科技面向新一代AI座艙推出了X10系列芯片,以及面向區域控制器、電驅和動力域控、高階輔助駕駛和艙駕融合系統等的高端智控MCU產品E3系…

DeepPrep:深度學習提升神經影像預處理

DeepPrep:深度學習提升神經影像預處理 一、DeepPrep介紹和BIDS格式介紹 神經影像預處理的痛點:傳統工具(如fMRIPrep)在大規模數據處理時效率低下,臨床樣本魯棒性不足。DeepPrep通過深度學習工作流管理實現突破&#…

pytorch 數據預處理和常用工具

文章目錄 NumPyNumpy數據結構安裝和使用NumPy Matplotlib的安裝和導入安裝和導入Matplotlib繪制基礎圖畫折線圖散點圖柱狀圖圖例 數據清洗據清洗的作用Pandas進行數據清洗Pandas數據結構Series 數據結構DataFrame數據結構 Pandas數據清洗常用代碼 特征工程主成分分析線性判別分…

MATLAB 中常用的微分函數介紹

MATLAB 中常用的微分函數介紹 在 MATLAB 中,微分運算是數值計算和符號計算中常用的功能。無論是在進行數據分析、優化算法,還是數學建模時,微分都扮演著重要的角色。本文將介紹 MATLAB 中常用的微分函數,并通過簡單的示例幫助大家…

按指定位置或關鍵字批量刪除工作表-Excel易用寶

在一個工作簿中有多個工作表,有些工作表不需要了,如果一個一個手動刪除,那實在是太慢了,有沒有什么好的方法可以批量刪除工作表。 批量刪除工作表很簡單,單擊【易用寶】→【工作表】→【批量刪除工作表】。 在打開的批…

TypeScript裝飾器:從入門到精通

TypeScript裝飾器:從入門到精通 什么是裝飾器? 裝飾器(Decorator)是TypeScript中一個非常酷的特性,它允許我們在不修改原有代碼的情況下,給類、方法、屬性等添加額外的功能。想象一下裝飾器就像給你的代碼…

【SSL證書系列】客戶端如何檢查中間CA簽名是否由根CA簽發

客戶端通過以下步驟檢查中間CA的簽名是否由受信任的根CA簽發: 1. 證書鏈的構建 服務器發送的證書鏈通常包含: ? 服務器證書(由中間CA簽發) ? 中間CA證書(由根CA簽發) ? 根CA證書(通常不發送…

【android bluetooth 協議分析 12】【A2DP詳解 1】【車機側藍牙音樂免切源介紹】

“車機藍牙音樂免切源” 是近年來車載系統(IVI,In-Vehicle Infotainment)中常見的一個用戶體驗優化功能。它主要是為了簡化藍牙音樂播放流程、減少用戶操作,提升使用便捷性。 一、什么是“切源”? 在車機系統中&#…

Android usb網絡共享詳解

Android usb網絡共享詳解 文章目錄 Android usb網絡共享詳解一、前言二、USB網絡共享使用的前提1、Android設備支持adb 并且打開usb開關2、原生Settings能看到USB網絡共享開關3、代碼中檢測USB網絡共享是否支持 三、Settings 中USB網絡共享代碼的部分代碼1、Settings\res\xml\t…

Step1

項目 SchedulerSim 已搭建完成 ? ? ? 你現在擁有的: ? 🔧 兩種調度器(Round Robin SJF) ? 📦 模擬進程類 Process ? 🧱 清晰結構:OOP 風格 便于擴展 ? ?? 主函數已演示調度器運行效…

初探 Skynet:輕量級分布式游戲服務器框架實戰

在游戲服務器開發領域,高效、穩定且易于擴展的框架一直是開發者追求的目標。Skynet 作為一款輕量級、高性能的分布式游戲服務器框架,憑借其獨特的設計理念和強大的功能,贏得了眾多開發者的青睞 一.Skynet底層架構支持 1.Actor erlang 從語言…

Oracle數據庫中,WITH..AS 子句用法解析

前言 在Oracle數據庫中,WITH子句(也成為“子查詢因子化” 或“公共表表達式”,Common Table Expression, CTE)用于定義一個臨時命名的結果集,這個結果集可以在后續的查詢中引用。 一、基本語法 WITH sjtab AS (SELE…

什么是衛星電話?衛星電話與普通電話有什么區別?

在信息時代,通信技術已滲透到人類生活的方方面面,但傳統地面通信網絡仍存在盲區,無論是海洋、沙漠、高山,還是災害現場,普通手機往往因基站信號無法覆蓋而失效。此時,衛星電話便成為連接世界的“生命線”。…

【C/C++】高階用法_筆記

1. 模板元編程&#xff08;TMP&#xff09;與編譯時計算 (1) 類型萃取與 SFINAE 類型萃取&#xff08;Type Traits&#xff09;&#xff1a;利用模板特化在編譯時推斷類型屬性。 template<typename T> struct is_pointer { static constexpr bool value false; };templ…

鴻蒙OSUniApp 實現一個精致的日歷組件#三方框架 #Uniapp

使用 UniApp 實現一個精致的日歷組件 前言 最近在開發一個約會小程序時&#xff0c;需要實現一個既美觀又實用的日歷組件。市面上雖然有不少現成的組件庫&#xff0c;但都不太符合我們的設計需求。于是&#xff0c;我決定從零開始&#xff0c;基于 UniApp 自己實現一個功能完…

PyQt5完整指南:從入門到實踐

引言 PyQt5是Python編程語言的一個GUI&#xff08;圖形用戶界面&#xff09;工具包&#xff0c;它是Qt5應用程序框架的Python綁定。Qt是一個跨平臺的C應用程序開發框架&#xff0c;被廣泛用于開發GUI程序和非GUI程序。PyQt5讓Python開發者能夠使用Python語言享受到Qt框架的強大…

Excel的詳細使用指南

### **一、Excel基礎操作** #### **1. 界面與基本概念** - **工作簿&#xff08;Workbook&#xff09;**&#xff1a;一個Excel文件&#xff08;擴展名.xlsx&#xff09;。 - **工作表&#xff08;Worksheet&#xff09;**&#xff1a;工作簿中的單個表格&#xff08;默認名…

Linux grep -r 查找依賴包是否存在依賴類 Class

方法一&#xff1a;通過 Linux &#xff0c;grep -r ClassPath 命令 grep -f org.apache.kafka.connect.source.SourceRecord在 jar 包所在 lib 或者 lib/plugins 目錄下執行&#xff0c;grep -r&#xff0c; flink-sql-connector-sqlserver-cdc-3.3.0.jar 中此 kafka Source…

碎片筆記|AI生成圖像溯源方法源碼復現經驗(持續更新中……)

前言&#xff1a;本篇博客分享一些溯源方法的復現經驗&#xff0c;希望能幫助到大家&#x1f389;。 目錄 1. Close-set AttributionRepmixDe-FakeDNA-Net 2. Open-set AttributionPOSE 3. Single-Model AttributionOCC-CLIPLatentTracer 1. Close-set Attribution Repmix 論…