簡單工廠、工廠、抽象工廠模式

簡單工廠、工廠、抽象工廠模式

      • 1. **簡單工廠模式(Simple Factory)**
      • 2. **工廠方法模式(Factory Method)**
      • 3. **抽象工廠模式(Abstract Factory)**
      • 對比總結

以下是三種工廠模式在C#中的實現與對比分析,結合具體代碼示例說明:


1. 簡單工廠模式(Simple Factory)

  • 核心:通過一個靜態工廠方法根據參數返回不同產品實例。
  • C#示例(支付場景):
// 抽象產品
public interface IPayment { void Pay(decimal amount); }// 具體產品
public class Alipay : IPayment { public void Pay(decimal amount) => Console.WriteLine($"支付寶支付:{amount}元"); }
public class WeChatPay : IPayment { public void Pay(decimal amount) => Console.WriteLine($"微信支付:{amount}元"); }// 工廠類
public class PaymentFactory {public static IPayment Create(string type) {return type switch {"alipay" => new Alipay(),"wechat" => new WeChatPay(),_ => throw new ArgumentException("不支持的支付方式")};}
}// 客戶端調用
var payment = PaymentFactory.Create("alipay");
payment.Pay(100);
  • 特點
    • ? 客戶端與具體類解耦。
    • ? 新增支付方式需修改工廠類,違反開閉原則。

2. 工廠方法模式(Factory Method)

  • 核心:將對象創建延遲到子類,每個產品對應一個工廠。
  • C#示例(日志記錄器場景):
// 抽象產品
public interface ILogger { void Log(string message); }// 具體產品
public class FileLogger : ILogger { public void Log(string message) => Console.WriteLine($"文件日志:{message}"); }
public class DatabaseLogger : ILogger { public void Log(string message) => Console.WriteLine($"數據庫日志:{message}"); }// 抽象工廠
public interface ILoggerFactory { ILogger CreateLogger(); }// 具體工廠
public class FileLoggerFactory : ILoggerFactory {public ILogger CreateLogger() => new FileLogger();
}
public class DatabaseLoggerFactory : ILoggerFactory {public ILogger CreateLogger() => new DatabaseLogger();
}// 客戶端調用
ILoggerFactory factory = new FileLoggerFactory();
var logger = factory.CreateLogger();
logger.Log("測試日志");
  • 特點
    • ? 新增日志類型只需添加新工廠類,符合開閉原則。
    • ? 類數量隨產品增加而增多。

3. 抽象工廠模式(Abstract Factory)

  • 核心:創建一組相關產品族(如跨平臺UI組件)。
  • C#示例(UI組件場景):
// 抽象產品族
public interface IButton { void Render(); }
public interface ITextBox { void Input(); }// Windows產品族
public class WinButton : IButton { public void Render() => Console.WriteLine("Windows風格按鈕"); }
public class WinTextBox : ITextBox { public void Input() => Console.WriteLine("Windows風格文本框輸入"); }// Mac產品族
public class MacButton : IButton { public void Render() => Console.WriteLine("Mac風格按鈕"); }
public class MacTextBox : ITextBox { public void Input() => Console.WriteLine("Mac風格文本框輸入"); }// 抽象工廠
public interface IUIFactory {IButton CreateButton();ITextBox CreateTextBox();
}// 具體工廠
public class WinUIFactory : IUIFactory {public IButton CreateButton() => new WinButton();public ITextBox CreateTextBox() => new WinTextBox();
}
public class MacUIFactory : IUIFactory {public IButton CreateButton() => new MacButton();public ITextBox CreateTextBox() => new MacTextBox();
}// 客戶端調用
IUIFactory factory = new WinUIFactory();
var button = factory.CreateButton();
button.Render();
  • 特點
    • ? 保證同一產品族的兼容性(如所有Windows組件風格一致)。
    • ? 擴展新產品類型(如ICheckbox)需修改所有工廠接口。

對比總結

維度簡單工廠工廠方法抽象工廠
創建目標單一產品單一產品一組相關產品族
擴展性需修改工廠類新增工廠子類新增產品族易,擴展產品類型難
適用場景支付方式選擇日志記錄器跨平臺UI套件

💡 演進邏輯

  • 簡單工廠 → 工廠方法:解決開閉原則問題。
  • 工廠方法 → 抽象工廠:支持產品族創建。

引用鏈接:
1.深入解析工廠模式及其C#實現 - CSDN博客
2.c#簡單工廠、工廠方法與抽象工廠的區別分析 - CSDN博客
3.C#設計模式教程(1):簡單工廠模式 - CSDN下載
4.2-1 簡單工廠模式(Simple Factory) - bravo1988
5.c#中工廠模式詳解 - 博客園
6.《C#設計模式》 工廠三兄弟之 【簡單工廠模式】,【工廠方法模式】,【抽象工廠模式】 - CSDN
7.C#設計模式(4)——抽象工廠模式 - CSDN
8.設計模式學習筆記(三)簡單工廠、工廠方法和抽象工廠之間的區別 - 騰訊云
9.c#語法-47設計模式之簡單工廠模式 - 嗶哩嗶哩
10.深入理解23種設計模式之五分鐘學會工廠&抽象工廠模式 - 嗶哩嗶哩
11.工廠模式分為哪三種類型 - 資料速遞員
12.簡單工廠模式:創建型模式的輕量級實現 - 蓋世傻白甜
13.工廠模式解析:三種模式的優缺點與使用場景 - 度小視
14.day09_03簡單工廠和抽象工廠模式 - 嗶哩嗶哩
15.7、【設計模式】之3種工廠模式的優缺點,使用場景,以及代碼示例。 - 嗶哩嗶哩
16.簡單工廠模式解析與應用 - 度小視
17.工廠方法模式解析與應用 - 度小視
18.千鋒java培訓:Java設計模式視頻教程-創建型模式-簡單工廠模式 - 千鋒教育
19.movin2333 - 博客園
20.C#設計模式之工廠模式的工廠方法 - 愛吃油麥菜
21.C#設計模式之工廠模式 - CSDN博客
22.C#中的工廠模式:實現與應用 - CSDN博客
23.C# 常用設計模式有哪些 - 博客園
24.C# 設計模式——簡單工廠模式、工廠模式、抽象工廠模式 - 博客園
25.3種工廠模式!讓代碼更靈活🔥 - 晶影幀
26.長安紅顏畫趙陽 - 長安紅顏畫趙陽
27.c# 假設一個基類,有很多個子類,用工廠模式去控制生成方法合適嗎? - 次元科技

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

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

相關文章

如何在Redis中實現緩存功能

Redis 是一種高性能的鍵值存儲系統,廣泛用于實現緩存功能。它通過將數據存儲在內存中,能夠快速讀寫數據,從而顯著提高應用程序的性能。在Redis中實現緩存功能需要結合數據讀寫策略、失效機制及性能優化方案。 一、Redis作為緩存的核心優勢 …

Kafka消費者客戶端源碼深度解析:從架構到核心流程

在Kafka生態系統中,消費者客戶端作為數據消費的入口,其設計與實現直接影響數據處理的效率和可靠性。本文將深入Kafka消費者客戶端源碼,通過核心組件解析、流程拆解與源碼分析,揭示其高性能消費背后的技術奧秘,并輔以架…

從0開始學習R語言--Day26--因果推斷

很多時候我們在探討數據的相關性問題時,很容易會忽略到底是數據本身的特點還是真的是因為特征的區分導致的不同,從而誤以為是特征起的效果比較大。 這就好比測試一款新藥是否真的能治病,假如吃藥的患者康復的更快,那到底是因為藥…

Python 中布爾值的使用:掌握邏輯判斷的核心

在 Python 中,布爾值(bool)是進行邏輯判斷的基礎。布爾值只有兩個可能的值:True 和 False。通過布爾值,你可以實現條件判斷、循環控制以及其他邏輯操作。今天,就讓我們一起深入探討如何在 Python 中使用布爾…

IDEA 中 Tomcat 部署 Java Web 項目(Maven 多模塊 非 Maven 通用版)(linux+windows)

引言 Java Web 開發中,Tomcat 是最常用的 Servlet 容器,而項目類型通常分為 Maven 管理(依賴自動處理、多模塊聚合) 和 非 Maven 純手工管理(手動引入 jar 包、配置項目結構)。本文覆蓋 兩種項目類型 的 T…

使用 React Native Web 實現三端統一開發

使用 React Native Web 實現三端統一開發 關鍵點 React Native Web 簡介:React Native Web 是一個允許開發者使用 React Native 組件和 API 構建 Web 應用的庫,支持在 iOS、Android 和 Web 上使用同一套代碼。架構:通過 React DOM 渲染 Rea…

分享一個git上基于std::array實現的循環隊列(Cycle Queue)模板類庫

為充分利用向量空間,克服“假溢出”現象的方法是:將向量空間想象為一個首尾相接的圓環,并稱這種向量為循環向量。存儲在其中的隊列稱為循環隊列(Circular Queue)。循環隊列是把順序隊列首尾相連,把存儲隊列元素的表從邏輯上看成一個環,成為循環隊列。 網上有很多關于循…

三維視頻融合平臺:如何構建動態感知的數字空間

分享大綱: 你的三維平臺為何不能承載動態視頻捷碼打造三維視頻融合平臺的三步法則為何選擇捷碼 在智慧城市建設過程中,將實時視頻與三維空間結合,已經成為一種主流趨勢。傳統視頻監控模式,經常面臨視頻分散、操作復雜等問題。然而…

【AI Study】第五天,Matplotlib(5)- 顏色映射

文章概要 本文詳細介紹 Matplotlib 的顏色映射功能,包括: 顏色映射類型顏色映射設置數據標準化顏色條 顏色映射類型 pcolormesh import matplotlib.pyplot as plt import numpy as np# 創建網格數據 x np.linspace(-3, 3, 100) y np.linspace(-3,…

DB2中合理使用INCLUDE關鍵字創建索引

DB2中合理使用 INCLUDE 關鍵字創建索引 1. 為何還需要 INCLUDE?——從索引的兩大痛點說起 查詢想“只讀索引不回表”,卻又不想把列都做鍵 → 聯合索引空間膨脹,更新放大。唯一索引定位快,但只能返回鍵列數據 → 仍需 I/O 跳回數據…

基于Spring Boot的民宿管理系統設計與實現

目錄 一.🦁前言二.🦁開源代碼與組件使用情況說明三.🦁核心功能1. ?算法設計2. ?Spring Boot框架3. ?Vue.js框架4. ?部署項目 四.🦁演示效果1. 管理員模塊1.1 瀏覽后臺首頁1.2 預訂信息管理1.3 入住信息管理1.4 退房信息管理1.…

大數據系統架構實踐(一):Zookeeper集群部署

大數據系統架構實踐(一):Zookeeper集群部署 文章目錄 大數據系統架構實踐(一):Zookeeper集群部署一、Zookeeper簡介二、部署前準備三、部署Zookeeper集群1. 下載并解壓安裝包2. 配置zoo.cfg3. 設置日志目錄…

《道德經》:探尋古老智慧中的哲學之光

我強烈推薦4本可以改變命運的經典著作: 《壽康寶鑒》在線閱讀白話文《欲海回狂》在線閱讀白話文《陰律無情》在線閱讀白話文《了凡四訓》在線閱讀白話文 《道德經》作為道家經典,短短五千言,卻字字珠璣,蘊含著超越時空的哲學智慧。…

科技賦能民生:中建海龍為民生改善注入新動力

在社會發展的進程中,民生改善始終占據著核心地位。住房、基礎設施建設等民生領域的進步,直接關系到民眾的生活質量與幸福感。中建海龍科技有限公司(以下簡稱“中建海龍”)作為建筑行業的創新引領者,憑借其強大的科技實…

BI 賦能,打造數據可視化看板新體驗

BI 賦能,打造數據可視化看板新體驗 引言 在當今數字化時代,數據成為企業決策的重要依據。如何從海量的數據中提取有價值的信息,并以直觀、易懂的方式呈現出來,是企業面臨的重要挑戰。商業智能(BI)工具的出…

vue2設置自定義域名跳轉

需求:首次登錄域名為aa.com,之后登錄系統后在系統內某個模塊設置三級域名為second,之后退出登錄到aa.com,登錄進入系統后域名自動變為second.aa.com,最后退出的域名也是second.aa.com,通過不同的域名配置動態的登錄頁面…

“地標界愛馬仕”再拓疆域:世酒中菜聯袂赤水金釵石斛定義中國GI

“地標界愛馬仕”再拓疆域:世酒中菜聯袂赤水金釵石斛,定義中國GI奢侈品新高度 ——中世國際與貴州斛滿多戰略合作簽約儀式在赤水舉行 赤水市,2025年5月18日——被譽為“地標界愛馬仕”的頂級奢侈品牌世酒中菜 (世界酒中國菜全球…

零基礎、大白話,Vue3全篇通俗療法(上):基礎知識【看得懂】

前言 最近有個小朋友想了解Vue前端技術,但他只懂一些HTML基礎,讓我用最簡單的方式講解。于是就有了這篇面向初學者的博文。 老手請繞行,本文專為新手準備。如果發現用詞不當的地方歡迎留言指正,覺得對新手有幫助的話請收藏點贊。 …

JavaScript性能優化實戰

JavaScript性能優化實戰技術文章大綱 性能優化的重要性 解釋為什么性能優化對用戶體驗和業務指標至關重要討論核心Web指標(LCP、FID、CLS)與JavaScript性能的關系 代碼層面優化 減少DOM操作,使用文檔片段或虛擬DOM避免頻繁的重繪和回流&a…

考研英語作文評分標準專業批改

考研英語作文專業批改經過官方評分標準嚴格對標,徹底改變你的作文提升方式,打開 懂試帝小程序 直達批改。 🎯 批改服務核心優勢 ? 官方標準嚴格對標 完全按照考研英語官方五檔評分制,從內容完整性、組織連貫性、語言多樣性到語…