簡單工廠 、工廠方法模式和抽象工廠模式

簡單工廠 、工廠方法模式和抽象工廠模式

1.模式性質與定位

簡單工廠:并非正式的設計模式(屬編程習慣),通過單一工廠類根據參數判斷創建不同產品,本質是將對象創建邏輯集中管理。
工廠方法:是標準的創建型設計模式,定義抽象創建接口,由子類決定實例化哪個具體產品類,強調 “單一產品” 的靈活創建。
抽象工廠:同樣是創建型設計模式,聚焦 “產品族” 的創建,一個工廠類負責創建一組相關產品(如手機、耳機、充電器組成的電子產品族)。

2產品創建范圍

簡單工廠、工廠方法:側重單個產品的創建。例如,創建 “手機” 這一產品,簡單工廠通過條件判斷決定具體手機類型,工廠方法通過子類工廠創建特定手機。
抽象工廠:關注多個相關產品的組合創建。如創建 “手機 + 耳機” 的產品族,抽象工廠需定義多個創建方法,分別生成不同類型的產品。

3.擴展性與開閉原則

簡單工廠:擴展性差。新增產品時需修改工廠類的創建邏輯(如添加if-else或switch分支),違反開閉原則。
工廠方法:擴展性好。新增產品時,只需定義新的產品類和對應的工廠子類,無需修改原有工廠代碼,完全符合開閉原則。
抽象工廠:擴展性較復雜。新增產品族時,可通過擴展工廠子類實現;但新增某一產品類型(如產品族中新增 “平板”),需修改抽象工廠接口及所有具體工廠類,違背開閉原則。

  1. 結構復雜度
    簡單工廠:結構最簡單,僅一個工廠類處理所有產品創建邏輯。
    工廠方法:復雜度適中,包含抽象產品、具體產品、抽象工廠、具體工廠等類,需為每個產品設計對應的工廠子類。
    抽象工廠:結構最復雜,涉及多個產品接口、多個具體產品類,以及包含多個創建方法的抽象工廠和具體工廠類,代碼量和類關系更多。
  2. 典型應用場景
    簡單工廠:適用于產品種類少、創建邏輯不復雜,且后續擴展需求低的場景,如簡單的日志記錄器創建。
    工廠方法:適用于需要靈活擴展產品類型的場景,如不同數據庫連接對象的創建(新增數據庫類型時,擴展工廠子類即可)。
    抽象工廠:適用于產品需成族搭配使用的場景,如跨平臺 UI 組件(Windows 和 Mac 的 “按鈕 + 文本框” 組件族,通過抽象工廠創建對應平臺的組件組合)。
4. 簡單工廠模式
  1. 定義支付接口
public interface Payment {String pay(String orderId, double amount);
}

2.實現微信支付類

public class WeChatPayment implements Payment {@Overridepublic String pay(String orderId, double amount) {return "使用微信支付,訂單號:" + orderId + ",金額:" + amount;}
}

3.實現支付寶支付類

public class AlipayPayment implements Payment {@Overridepublic String pay(String orderId, double amount) {return "使用支付寶支付,訂單號:" + orderId + ",金額:" + amount;}
}
  1. 創建簡單工廠類
public class PaymentFactory {public static Payment createPayment(String payType) {if ("wechat".equals(payType)) {return new WeChatPayment();} else if ("alipay".equals(payType)) {return new AlipayPayment();}return null;}
}
  1. 客戶端調用
public class 

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

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

相關文章

熱圖回歸(Heatmap Regression)

熱圖回歸(Heatmap Regression)是一種常用于關鍵點估計任務的方法,特別是在人體姿態估計中。它的基本思想是通過生成熱圖來表示某個關鍵點在圖像中出現的概率或強度。以下是熱圖回歸的主要特點和工作原理: 主要特點 熱圖表示: 每個關鍵點對應一個熱圖,熱圖中的每個像素值…

Word 小黑第15套

對應大貓16 修改樣式集 導航 -查找 第一章標題不顯示 再選中文字 點擊標題一 修改標題格式 格式 -段落 -換行和分頁 勾選與下段同頁 添加腳注 (腳注默認位于底部 )在腳注插入文檔屬性: -插入 -文檔部件 -域 類別選擇文檔信息,域…

Java 大視界 -- Java 大數據在智能安防視頻摘要與檢索技術中的應用(128)

💖親愛的朋友們,熱烈歡迎來到 青云交的博客!能與諸位在此相逢,我倍感榮幸。在這飛速更迭的時代,我們都渴望一方心靈凈土,而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識,也…

Python里matplotlib不顯示中文的問題

在很長一段時間里用Python繪圖,matplotlib都不能很好的顯示中文,起初是認為我的pycharm里的設置問題,但是發現同樣的問題在spyder里也同樣的出現。 一共有兩種解決方案,我強烈推薦第一種,因為更為方便,繪圖…

JavaWeb-servlet6中request和response的使用

HttpServletRequest HttpServletRequest 繼承自 ServletRequest。客戶端瀏覽器發出的請求被封裝成為一個 HttpServletRequest對象。 對象包含了客戶端請求信息包括請求的地址,請求的參數,提交的數據,上傳的文件客戶端的ip甚至客戶端操作系統…

機器學習(吳恩達)

一, 機器學習 機器學習定義: 計算機能夠在沒有明確的編程情況下學習 特征: 特征是描述樣本的屬性或變量,是模型用來學習和預測的基礎。如: 房屋面積, 地理位置 標簽: 監督學習中需要預測的目標變量,是模型的輸出目標。如: 房屋價格 樣本: 如: {面積100㎡…

CNN的激活函數

我們來對比 Sigmoid、Softmax 和 ReLU 這三種激活函數的相同點和不同點,并分別說明它們相較于其他兩種激活函數的優點。 相同點 都是非線性激活函數: 這三種激活函數都能為神經網絡引入非線性特性,使網絡能夠學習復雜的模式。 廣泛應用于深度…

Oracle數據恢復:閃回查詢

Oracle數據恢復:閃回查詢 SQL語法閃回查詢:AS OF閃回版本查詢:VERSIONS BETWEEN數據恢復示例閃回查詢最佳實踐應用場景使用限制注意事項最佳實踐在誤刪除業務數據時,Oracle數據庫通常支持以下幾種數據恢復途徑。 閃回查詢(Flashback Query):閃回查詢通過查詢系統的UNDO數…

【MySQL篇】MySQL內置函數

目錄 1,日期函數 2,字符串函數 3,數學函數 4,其他函數 實戰OJ 1,日期函數 日期類型在之前文章【數據類型】中有描述 傳送門:【MySQL篇】數據類型_mysql 數據類型-CSDN博客 函數名稱描述current_dat…

蘋果iOS 18.4將強制升級HomeKit架構,舊版設備或無法使用

在科技飛速發展的當下,智能家居領域也在不斷革新。而蘋果公司作為科技行業的巨頭,其每一次動作都備受關注。近日,有消息稱蘋果計劃在iOS 18.4版本中停止對舊版HomeKit架構的支持,這一舉措意味著用戶將被迫升級,也可能對眾多使用Apple Home應用的智能家居設備用戶產生深遠影…

故障診斷——neo4j入門

文章目錄 neo4jQuickStartDemo neo4j QuickStart 詳情可見博客:https://www.cnblogs.com/nhdlb/p/18703804,使用docker拉取最近的一個版本進行創建 docker run -it -d -p 7474:7474 -p 7687:7687 \ -v /disk5/neo4j_docker/data:/data \ -v /disk5/ne…

《蒼穹外賣》SpringBoot后端開發項目核心知識點與常見問題整理(DAY1 to DAY3)

目錄 一、在本地部署并啟動Nginx服務1. 解壓Nginx壓縮包2. 啟動Nginx服務3. 驗證Nginx是否啟動成功: 二、導入接口文檔1. 黑馬程序員提供的YApi平臺2. YApi Pro平臺3. 推薦工具:Apifox 三、Swagger1. 常用注解1.1 Api與ApiModel1.2 ApiModelProperty與Ap…

大模型安全新范式:DeepSeek一體機內容安全衛士發布

2月以來,DeepSeek一體機幾乎成為了政企市場AI消費的最強熱點。 通過一體機的方式能夠縮短大模型部署周期,深度結合業務場景,降低中小企業對于大模型的使用門檻。據不完全統計,已約有超過60家企業基于DeepSeek推出一體機產品。 但…

OpenHarmony-SELinux配置

前言: OpenHarmony 上某個進程向samgr注冊SA服務,其他進程在與該進程進行IPC通信之前,需要獲取該SA服務,SA提供方需要為該SA配置SELinux標簽,否則該SA會被SELinux配置為u:object_r:default_service:s0標簽&#xff0c…

SQL開發中改善查詢性能的N種寫法

文章目錄 1. 使用 SELECT *2. 在 WHERE 子句中使用函數或計算3. 使用隱式類型轉換4. 不使用索引的列進行連接(JOIN)或過濾5. 使用 OR 代替 IN6. 在子查詢中使用 SELECT *7. 忽略索引統計信息8. 嵌套子查詢過多9. 過度使用 DISTINCT10. 使用不當的 JOIN 類…

第十八:go 并發 goroutine

channel 可以讓多個goroutine 之間實現通信 Add方法調用時機:必須在goroutine 啟動之前調用Add方法來增加計數器的值。 如果在goroutine已經啟動之后再調用Add,可能會導致Wait方法提前返回,因為計數器沒有正確反映正在運行的goroutine的數量…

數字IC后端項目典型問題(2025.03.10數字后端項目問題記錄)

小編發現今天廣大學員發過來的問題都比較好,立即一頓輸出分享給大家(每天都有好多種類的數字后端問題)。后續可能會經常通過這種方式來做分享。其實很多問題都是實際后端項目中經常遇到的典型問題。希望通過這種方式的分享能夠幫助到更多需要…

課程《Deep Learning Specialization》

在coursera上,Deep Learning Specialization 課程內容如下圖所示: Week2 assignment, Logistic Regression.

LLM推理和優化(1):基本概念介紹

一、LLM推理的核心過程:自回歸生成 LLM(如DeepSeek、ChatGPT、LLaMA系列等)的推理本質是自回歸生成:從初始輸入(如[CLS]或用戶prompt)開始,逐token預測下一個詞,直到生成結束符&…

【從零開始學習計算機科學】編譯原理(一)編譯過程概述

【從零開始學習計算機科學】編譯原理(一)編譯過程概述 緒論編譯過程概述詞法分析語法分析代碼優化代碼生成其他功能編譯器的前端和后端緒論 什么叫編譯程序?為什么我們需要編譯程序?編譯程序就是一個程序,將便于人編寫、閱讀、維護的高級計算機語言所寫作的源代碼程序,翻…