是一种创建型设计模式。
特点是解耦客户端对对象的创建,使用抽象的工厂类,让类的扩展更加容易,相比简单工厂模式更具有灵活性和扩展性。优点:
- 工厂方法模式将对象的创建与使用分开,使客户端代码无需关心对象是如何创建的;
- 扩展性强,且符合开闭原则。需要添加新的实现类时,无需修改原有代码,只需添加一个相应的工厂类即可;
- 支持多态,在运行时子类可以被替换,从而支持多态编程;
- 易于修改和维护;
- 易于管理复杂的创建逻辑。
缺点:
- 工厂类增加,导致系统的复杂性增加;
- 导致类的层次结构更加复杂;
适用场景:
- 需要创建的产品种类较多的场景;
- 系统需要多次动态扩展产品时;
- 需要将类的实例化过程与客户端分离开。
示例:
cspublic interface IAnimal { void Speak(); }
cspublic class Dog : IAnimal { public void Speak() { Console.WriteLine("Woof! Woof!"); } }
cspublic class Cat : IAnimal { public void Speak() { Console.WriteLine("Meow! Meow!"); } }
cs/// <summary> /// 抽象工厂类 /// </summary> public abstract class AnimalFactory { public abstract IAnimal CreateAnimal(); }
cs/// <summary> /// 工厂实现类 /// </summary> public class DogFactory : AnimalFactory { public override IAnimal CreateAnimal() { return new Dog(); } }
cs/// <summary> /// 工厂实现类 /// </summary> public class CatFactory : AnimalFactory { public override IAnimal CreateAnimal() { return new Cat(); } }
cs/// <summary> /// 客户端 /// </summary> public class Client { public static void Main(string[] args) { //用DogFactory创建dog对象 AnimalFactory dogFactory = new DogFactory(); IAnimal dog = dogFactory.CreateAnimal(); dog.Speak(); //CatFactory创建cat对象 AnimalFactory catFactory = new CatFactory(); IAnimal cat = catFactory.CreateAnimal(); cat.Speak(); } }
【设计模式&C#】工厂方法模式(相比简单工厂模式更加具有灵活性和扩展性的工厂模式)
大飞pkz2025-07-22 13:57
相关推荐
被摘下的星星6 分钟前
Java的类加载skilllite作者9 分钟前
SkillLite 多入口架构实战:CLI / Python SDK / MCP / Desktop / Swarm 一页理清秋月的私语15 分钟前
遥感影像拼接线优化工具:基于Qt+GDAL+OpenCV的从零到一实践xwz小王子23 分钟前
智元发布 GO-2:动作空间推理 + 全生命周期闭环,让机器人稳定可靠落地charlie11451419123 分钟前
通用GUI编程技术——图形渲染实战(二十八)——图像格式与编解码:PNG/JPEG全掌握ZC跨境爬虫26 分钟前
海南大学交友平台登录页开发实战day4(解决python传输并读取登录信息的问题)wjs202428 分钟前
SQL LEN() 函数详解姓刘的哦34 分钟前
Qt自定义控件Ricky_Theseus34 分钟前
C++静态库SuperEugene35 分钟前
Python 异步 async/await:为什么 AI 框架大量使用?| 基础篇