设计模式 - 抽象工厂模式
1.设计模式 - 工厂模式
2.设计模式 - 抽象工厂模式
3.设计模式 - 单例模式4.设计模式 - 建造者模式5.设计模式 - 原型模式6.设计模式 - 适配器模式7.设计模式 - 桥接模式8.设计模式 - 组合模式9.设计模式 - 装饰模式10.设计模式 - 外观模式11.设计模式 - 享元模式12.设计模式 - 代理模式13.设计模式 - 责任链模式14.设计模式 - 命令模式15.设计模式 - 解释器模式16.设计模式 - 迭代器模式17.设计模式 - 中介者模式18.设计模式 - 备忘录模式19.设计模式 - 观察者模式20.设计模式 - 状态模式21.设计模式 - 策略模式22.设计模式 - 模板方法模式23.设计模式 - 访问者模式24.设计模式合集概述
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。这种模式通过将一系列相关或相互依赖的对象的创建过程封装在一个工厂中,提高了代码的灵活性和可维护性。
结构
抽象工厂模式包含以下几个角色:
- 抽象产品(AbstractProduct):定义了产品的接口。
- 具体产品(ConcreteProduct):实现了抽象产品接口的具体类。
- 抽象工厂(AbstractFactory):声明了一组创建抽象产品的方法。
- 具体工厂(ConcreteFactory):实现了抽象工厂接口,创建具体产品的实例。
示例代码
假设我们有一个应用程序需要创建不同风格的UI组件(如按钮和文本框)
代码地址
抽象产品
public interface IButton
{
void Render();
}
public interface ITextBox
{
void Render();
}
具体产品
public class WinButton : IButton
{
public void Render()
{
Console.WriteLine("Rendering a Windows button.");
}
}
public class WinTextBox : ITextBox
{
public void Render()
{
Console.WriteLine("Rendering a Windows text box.");
}
}
public class MacButton : IButton
{
public void Render()
{
Console.WriteLine("Rendering a Mac button.");
}
}
public class MacTextBox : ITextBox
{
public void Render()
{
Console.WriteLine("Rendering a Mac text box.");
}
}
抽象工厂
public interface IUIFactory
{
IButton CreateButton();
ITextBox CreateTextBox();
}
具体工厂
public class WinFactory : IUIFactory
{
public IButton CreateButton()
{
return new WinButton();
}
public ITextBox CreateTextBox()
{
return new WinTextBox();
}
}
public class MacFactory : IUIFactory
{
public IButton CreateButton()
{
return new MacButton();
}
public ITextBox CreateTextBox()
{
return new MacTextBox();
}
}
客户端代码
class Program
{
static void Main(string[] args)
{
IUIFactory factory;
IButton button;
ITextBox textBox;
// 创建Windows风格的UI组件
factory = new WinFactory();
button = factory.CreateButton();
textBox = factory.CreateTextBox();
button.Render();
textBox.Render();
// 创建Mac风格的UI组件
factory = new MacFactory();
button = factory.CreateButton();
textBox = factory.CreateTextBox();
button.Render();
textBox.Render();
}
}
应用场景
抽象工厂模式适用于以下场景:
- 当一个系统要独立于它的产品的创建、组合和表示时。
- 当一个系统要由多个产品系列中的一个来配置时。
- 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
优缺点
优点
- 提高代码的灵活性:通过将一系列相关或相互依赖的对象的创建过程封装在一个工厂中,抽象工厂模式使得代码更加灵活和可扩展。
- 降低耦合度:客户端代码不需要知道具体产品类的名称,只需要知道抽象产品接口,从而降低了代码的耦合度。
缺点
- 增加代码复杂性:每增加一个产品系列,就需要增加一组相应的具体产品类和具体工厂类,导致代码量增加。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库