簡單工廠、工廠、抽象工廠模式
- 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# 假設一個基類,有很多個子類,用工廠模式去控制生成方法合適嗎? - 次元科技