C#设计模式--工厂方法模式
设计模式:
工厂方法模式(Factory Method Pattern)
介绍:简单工厂模式是要在工厂类中通过数据来做个决策,在工厂类中的多个类中实例化出来其中一个要用到的类,做运算。而工厂方法模式则是他的一个的扩展,不在工厂类中做区分从而创建对应的类,而是把这个选择决策权力交给使用类的用户决定。可扩展性比简单工厂模式要好很多
工厂方法模式类图:
工厂方法模式C#代码举例:
MobilePhone类手机类
1 public abstract class MobilePhone 2 { 3 public abstract void print(); 4 }
Iphone 类 苹果手机类
1 public class Iphone : MobilePhone 2 { 3 public override void print() 4 { 5 Console.WriteLine("我是苹果手机!"); 6 } 7 }
XiaoMI 类 小米手机类
1 public class XiaoMI:MobilePhone 2 { 3 public override void print() 4 { 5 Console.WriteLine("我是小米手机"); 6 } 7 }
SmarTisan类 锤子手机类
1 public class SmarTisan : MobilePhone 2 { 3 public override void print() 4 { 5 Console.WriteLine("我是锤子手机!"); 6 } 7 }
MobilePhoneFactory 类 手机工厂类
1 public abstract class MobilePhoneFactory 2 { 3 public abstract MobilePhone Create(); 4 }
IphoneFactory 类 苹果手机工厂类
1 public class IphoneFactory:MobilePhoneFactory 2 { 3 public override MobilePhone Create() 4 { 5 return new Iphone(); 6 } 7 }
XiaoMiFactory类 小米手机工厂类
1 public class XiaoMiFactory:MobilePhoneFactory 2 { 3 public override MobilePhone Create() 4 { 5 return new XiaoMI(); 6 } 7 }
SmarTisanFactory类 锤子手机工厂类
1 public class SmarTisanFactory:MobilePhoneFactory 2 { 3 public override MobilePhone Create() 4 { 5 return new SmarTisan(); 6 } 7 }
测试
(即使每次增加新的品牌,只需要增加新品牌的类,以及对应工厂即可使用,方便扩展)
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //创建苹果手机工厂 6 MobilePhoneFactory mobilePhoneFactoryIphone = new IphoneFactory(); 7 //苹果手机工厂创建手机 8 MobilePhone mobilePhoneIphone = mobilePhoneFactoryIphone.Create(); 9 //由苹果工厂创建苹果手机 10 mobilePhoneIphone.print(); 11 12 13 //小米工厂生产小米手机 14 MobilePhoneFactory mobilePhoneFactoryXiaoMi = new XiaoMiFactory(); 15 MobilePhone mobilePhoneXiaoMi = mobilePhoneFactoryXiaoMi.Create(); 16 mobilePhoneXiaoMi.print(); 17 18 19 //锤子手机工厂生产锤子手机 20 MobilePhoneFactory mobilePhoneFactorySmarTisan = new SmarTisanFactory(); 21 MobilePhone mobilePhoneSmarTisan = mobilePhoneFactorySmarTisan.Create(); 22 mobilePhoneSmarTisan.print(); 23 24 Console.Read(); 25 26 } 27 }
运行结果:
源码工程文件
标签:
工厂方法模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构