在简单工厂模式中通过工厂Factory获取不同的对象,但是有一个明显的缺点——简单工厂模式系统难以扩展!
一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,
可以通过工厂方法模式可以解决简单工厂模式中存在的这个问题,看代码:
/// <summary> /// 汽车抽象类 /// </summary> public abstract class AuthCar { /// <summary> /// 输出制造了什么汽车 /// </summary> public abstract void CreatorCar(); } /// <summary> /// 派生类-橘黄色轿车 /// </summary> public class _OriangeCar : AuthCar { public override void CreatorCar() { Console.WriteLine("生产了橘黄色轿车!"); } } /// <summary> /// 派生类-黑色轿车 /// </summary> public class _BlackCar : AuthCar { public override void CreatorCar() { Console.WriteLine("生产了黑色轿车"); } }
汽车类下面有两种不同颜色的汽车(橘黄色和黑色),下面通过工厂抽象类得到不同的汽车。
/// <summary> /// 工厂类 /// </summary> public abstract class FactoryCreator { /// <summary> /// 获取汽车对象 /// </summary> /// <returns></returns> public abstract AuthCar _AuthCar(); } /// <summary> /// 得到黑色汽车实例 /// </summary> public class BlackCarFactoryMethod : FactoryCreator { public override AuthCar _AuthCar() { return new _BlackCar(); } } /// <summary> /// 得到橘黄色汽车实例 /// </summary> public class OriangeFactoryMethod : FactoryCreator { public override AuthCar _AuthCar() { return new _OriangeCar(); } }
测试
class Program { static void Main(string[] args) { FactoryCreator factoryCreator = new BlackCarFactoryMethod(); FactoryCreator factoryCreator = new OriangeFactoryMethod(); factoryCreator._AuthCar().CreatorCar(); Console.ReadKey(); } }
使用工厂方法实现的系统,如果系统需要添加新产品时,我们可以利用多态性来完成系统的扩展,对于抽象工厂类和具体工厂中的代码都不需要做任何改动。
例如,我们我们还想输出一辆绿色汽车,此时我们只需要定义一个绿色汽车具体工厂类和绿色汽车类就可以。而不用像简单工厂模式中那样去修改工厂类中的实现(具体指添加case语句)。
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决