当前位置: 首页 > news >正文

93、23种设计模式之抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是23种设计模式中的创建型模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,适用于需要保证产品族兼容性、隔离产品创建细节的场景,但扩展新产品种类时需修改核心接口,可能违反开闭原则。 以下是详细介绍:

一、模式定义与核心角色

抽象工厂模式通过抽象接口定义产品族的创建规则,将具体产品的创建延迟到子类实现。其核心包含四个角色:

1.抽象工厂(Abstract Factory)

定义创建产品族的接口,包含多个创建产品的方法(如createButton()、createWindow())。

2.具体工厂(Concrete Factory)

实现抽象工厂接口,负责创建特定产品族的对象(如WindowsFactory创建Windows风格的按钮和窗口)。

3.抽象产品(Abstract Product)

为每种产品定义公共接口(如Button接口的click()方法)。

4.具体产品(Concrete Product)

实现抽象产品接口,由具体工厂创建(如WindowsButton实现Windows按钮的点击行为)。

二、模式特点与优缺点

1.优点

  • 产品族兼容性:确保同一工厂创建的对象风格一致(如Windows工厂生成的按钮和窗口均符合Windows设计规范)。
  • 解耦客户端与实现:客户端仅依赖抽象接口,无需关心具体产品类的创建细节(如切换UI风格时只需更换工厂实例)。
  • 符合开闭原则(部分场景):新增产品族时,只需扩展具体工厂类,无需修改现有代码(如新增Mac风格UI只需添加MacFactory)。

2.缺点

  • 扩展产品种类困难:新增产品类型需修改抽象工厂接口及所有子类(如增加createMenuBar()方法需更新所有工厂类)。
  • 系统复杂性增加:引入多层抽象结构,可能提升理解难度(尤其在产品族和产品等级结构复杂时)。

三、典型应用场景

1.跨平台UI框架

为不同操作系统(Windows、Mac、Linux)创建风格统一的控件(如按钮、文本框),保证界面一致性。

2.数据库访问层

支持多种数据库(MySQL、Oracle、SQL Server),通过抽象工厂屏蔽底层差异,提供统一的数据访问接口。

3.游戏开发

为不同主题或阵营批量生成关联角色、武器和道具(如奇幻主题的精灵、法杖和魔法书)。

4.品牌产品线管理

管理不同品牌(如家电、汽车)的系列产品族,确保产品间功能匹配(如汽车品牌的发动机、轮胎和座椅兼容性)。

四、代码示例(C#)

下面是一个完整的抽象工厂模式在C#中的实现示例,以创建跨平台UI组件为例:

1.定义抽象产品接

// 抽象按钮接口
public interface IButton
{void Render();
}// 抽象复选框接口
public interface ICheckbox
{void Render();
}

2. 创建具体产品实现

// Windows风格按钮
public class WindowsButton : IButton
{public void Render(){Console.WriteLine("渲染Windows风格按钮");}
}// MacOS风格按钮
public class MacOSButton : IButton
{public void Render(){Console.WriteLine("渲染MacOS风格按钮");}
}// Windows风格复选框
public class WindowsCheckbox : ICheckbox
{public void Render(){Console.WriteLine("渲染Windows风格复选框");}
}// MacOS风格复选框
public class MacOSCheckbox : ICheckbox
{public void Render(){Console.WriteLine("渲染MacOS风格复选框");}
}

3. 定义抽象工厂接口

public interface IUIFactory
{IButton CreateButton();ICheckbox CreateCheckbox();
}

4. 创建具体工厂实现

// Windows UI工厂
public class WindowsUIFactory : IUIFactory
{public IButton CreateButton(){return new WindowsButton();}public ICheckbox CreateCheckbox(){return new WindowsCheckbox();}
}// MacOS UI工厂
public class MacOSUIFactory : IUIFactory
{public IButton CreateButton(){return new MacOSButton();}public ICheckbox CreateCheckbox(){return new MacOSCheckbox();}
}

5. 客户端代码

public class Application
{private IButton button;private ICheckbox checkbox;public Application(IUIFactory factory){button = factory.CreateButton();checkbox = factory.CreateCheckbox();}public void RenderUI(){button.Render();checkbox.Render();}
}class Program
{static void Main(string[] args){// 根据当前操作系统选择工厂IUIFactory factory;if (Environment.OSVersion.Platform == PlatformID.Win32NT){factory = new WindowsUIFactory();}else{factory = new MacOSUIFactory();}// 创建应用并渲染UIvar app = new Application(factory);app.RenderUI();/* 输出示例(在Windows上):渲染Windows风格按钮渲染Windows风格复选框*/}
}

五、模式对比与扩展

1.与工厂方法模式的区别

  • 工厂方法模式针对单个产品等级结构(如仅创建按钮),抽象工厂模式针对多个产品等级结构(如同时创建按钮和窗口)。
  • 工厂方法模式的每个产品系列对应一个工厂类,抽象工厂模式的一个工厂类可创建多个相关产品。

2.扩展策略

  • 结合单例模式:确保每个具体工厂类只有一个实例,避免重复创建(如数据库连接池工厂)。
  • 结合建造者模式:处理复杂产品的构建细节(如游戏角色生成时,抽象工厂创建角色骨架,建造者模式填充属性)。

在这里插入图片描述

http://www.lryc.cn/news/623051.html

相关文章:

  • MySQL建表练习
  • GaussDB 数据库架构师修炼(十三)安全管理(3)-数据库审计
  • 人工智能中的(特征选择)数据过滤方法和包裹方法
  • Linux 下 安装 matlab 2025A
  • 安卓11 12系统修改定制化_____修改系统 解锁system分区 去除data加密 自由删减系统应用
  • python线程学习
  • Leetcode 14 java
  • AI 云电竞游戏盒子:从“盒子”到“云-端-芯”一体化竞技平台的架构实践
  • WSL 配置文件 wsl.conf 设置
  • Windows 基于ACL(访问控制列表)的权限管理
  • LeetCode 55.跳跃游戏:贪心策略下的可达性判断
  • Windows 操作系统 - Windows 恢复浏览器标题栏颜色
  • tensorrt-llm0.20.0:Prometheus3.5.0通过间接采集,进行性能指标分析
  • AirReceiverLite:轻松实现手机隔空投屏
  • 自动驾驶中的传感器技术24.1——Camera(16)
  • 电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
  • 40 C++ STL模板库9-容器2-vector
  • 下载数据集文件夹权限错误问题解决方案
  • PHP域名授权系统网站源码/授权管理工单系统/精美UI/附教程
  • 西门子SMART PLC监控时间戳问题BUG修复
  • weapp:按钮去除背景
  • 云计算-Kubernetes+Istio 实现金丝雀发布:流量管理、熔断、流量镜像、ingreess、污点及pv案例实战
  • leetcode_42 接雨水
  • H20芯片与中国的科技自立:一场隐形的博弈
  • 内网穿透实战笔记 1panel 面板部署 frps,Windows 部署 frpc
  • Win11和Win10共享打印机提示709用添加Windows凭据来解决的小方法
  • 自适应阈值二值化参数详解 ,计算机视觉,图片处理 邻域大小 调整常数(C=3)和可视化调节参数的应用程序
  • vscode中用python调用matlab的函数(环境安装)
  • 计算机网络:(十五)TCP拥塞控制与拥塞控制算法深度剖析
  • 安全审计-firewall防火墙