设计模式:抽象工厂方法模式
之前写的模式帖子:
今天说一下抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实际产出的具体产品是什么,这样一来,客户就从具体的产品中被解耦
我之前说过设计模式:工厂方法模式,我们最后会做一下两种模式的区别
我们看用类图看一下这个模式
每个抽象产品都有多于一个的一个人的具体子类,工厂角色怎么知道实例化哪一个子类?比如我们这个图,每个抽象产品都有两个具体产品,
抽象工厂有两个具体的工厂,分别对应这两个具体产品角色,每一个具体工厂只负责某一个家族的产品的实例化
我们来看一下代码
#region 抽象工厂模式 #region 产品 #region 产品A /// <summary> /// 抽象产品A /// </summary> public abstract class ProductA { } public class ConcreteProductA1 : ProductA { public ConcreteProductA1() { Console.WriteLine( "ProductA的ConcreteProductA1...A1" ); } } public class ConcreteProductA2 : ProductA { public ConcreteProductA2() { Console.WriteLine( "ProductA的ConcreteProductA2...A2" ); } } #endregion #region 产品B /// <summary> /// 抽象产品B /// </summary> public abstract class ProductB { } public class ConcreteProductB1 : ProductB { public ConcreteProductB1() { Console.WriteLine( "ProductB的ConcreteProductB1类...B1" ); } } public class ConcreteProductB2 : ProductB { public ConcreteProductB2() { Console.WriteLine( "ProductB的ConcreteProductB2类...B2" ); } } #endregion #endregion #region 工厂类 public abstract class Creator { public abstract ProductA CreateProductA(); public abstract ProductB CreateProductB(); } public class ConcreteCreatorA : Creator { public override ProductA CreateProductA() { return new ConcreteProductA1(); } public override ProductB CreateProductB() { return new ConcreteProductB1(); } } public class ConcreteCreatorB : Creator { public override ProductA CreateProductA() { return new ConcreteProductA2(); } public override ProductB CreateProductB() { return new ConcreteProductB2(); } } #endregion #endregion |
//Client static void Main( string [] args) { #region 抽象工厂模式 Creator _creatorA = new ConcreteCreatorA(); _creatorA.CreateProductA(); _creatorA.CreateProductB(); Creator _creatorB = new ConcreteCreatorB(); _creatorB.CreateProductA(); _creatorB.CreateProductB(); #endregion Console.ReadLine(); } |
抽象工厂模式除了具有工厂方法模式的做点外,主要就是可以在类的内部对产品族进行约束。所谓的产品族一般都有一定的联系,抽象工厂模式就可以
在类内部对产品族的关联关系进行描述,而不必专门引入一个新的类来进行管理。抽象模式最大的缺点就是产品族的扩展,如果要加一个新的产品,差不多所有
的工厂类都需要进行修改,所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。
这们来说一个抽象工厂模式和工厂模式的区别:
我们看一下抽象模式的类图:设计模式:工厂方法模式
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个
作者:李鹏
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?