设计模式-抽象工厂模式
抽象工厂模式Abstract Factory提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。使用普通工厂方法每次只能负责生产某单一类型的对象一旦遇到需要“成套搭配”的产品场景极其容易产生配置混乱 最优方案是由抽象工厂定义一整套相关产品的创建规范再由具体的工厂来负责这一整套产品族的具体实现客户端只需要和接口打交道就能打包获取一整套相互兼容的产品。AbstractFactory接口声明了一组用于创建一族产品的方法例如 CreateProductA、CreateProductB每个方法负责创建一种类型的产品。优缺点优点产品族一致性当一个产品族中的多个对象被设计成一起工作时它能保证客户端始终只使用同一个产品族中的对象杜绝“品牌混用”导致的兼容性问题极佳的解耦性客户端不仅不用关心对象的具体创建逻辑甚至不知道最终使用的是哪个具体的产品类实现了调用端与产品实现的完全隔离批量切换极其简单修改具体工厂的实例化语句就能在代码中一键切换整个系统的产品风格、运行环境或数据库类型。缺点难以扩展新产品种类如果产品族里需要增加一个全新的产品角色比如原来只有键盘、鼠标现在要新增一个耳机必须修改抽象工厂的底层接口所有实现该接口的具体工厂类全部都要跟着改动严重违背了“开闭原则”类爆炸问题由于系统需要为每一个产品族、每一个产品等级准备对应的接口和具体类前期架构中类的数量会极速成倍膨胀带来较高的阅读与维护成本。举个例子RS工作室给新来的两名程序员小伙伴配置桌面办公装备键盘 鼠标。咱们采购外设一般讲究“生态套装”要么全选极简办公风要么全选机械朋克风。如果混用不仅外观极其别扭各家的驱动程序还得同时装好几个如果不使用抽象工厂模式大家都是在 main 方法里随便 newpublic class Office { public static void main(String[] args) { // 小A想组一台机器 Keyboard k1 new PunkKeyboard(); Mouse m1 new MinimalistMouse(); k1.type(); m1.click(); } }敲击机械朋克键盘咔哒咔哒 点击极简静音鼠标无声轻触...输出结果虽然能用但观察到 小A不小心买成了“朋克风键盘 极简风鼠标”不仅桌面上看起来辣眼睛而且两者驱动不兼容。主要缺点控制不了产品组合的搭配一旦全公司几百人同时配置手一抖就会产生各种奇奇怪怪的“杂牌军”组合。但是使用抽象工厂呢我们将键盘和鼠标死死绑定为一个“产品族”// 1. 定义产品接口 public interface Keyboard { void type(); } public interface Mouse { void click(); } // 2. 朋克风产品族 public class PunkKeyboard implements Keyboard { public void type() { System.out.println(敲击机械朋克键盘咔哒咔哒有劲); } } public class PunkMouse implements Mouse { public void click() { System.out.println(点击朋克鼠标RGB发光炫酷触发); } } // 3. 极简风产品族 public class MinimalistKeyboard implements Keyboard { public void type() { System.out.println(敲击极简键盘巧克力键帽轻柔舒适); } } public class MinimalistMouse implements Mouse { public void click() { System.out.println(点击极简鼠标人体工学静音无声); } } // 4. 抽象工厂规定每个具体工厂必须出产一个键盘和一个鼠标 public interface PeripheralFactory { Keyboard createKeyboard(); Mouse createMouse(); } // 5. 具体工厂A负责专门生产朋克套装 public class PunkFactory implements PeripheralFactory { public Keyboard createKeyboard() { return new PunkKeyboard(); } public Mouse createMouse() { return new PunkMouse(); } } // 6. 具体工厂B负责专门生产极简套装 public class MinimalistFactory implements PeripheralFactory { public Keyboard createKeyboard() { return new MinimalistKeyboard(); } public Mouse createMouse() { return new MinimalistMouse(); } }客户端调用时只需要指定一个具体工厂产出的设备天然配对public class Studio { public static void main(String[] args) { // 行政人员决定今天给新员工配“机械朋克套装” PeripheralFactory factory new PunkFactory(); // 程序员只管从工厂领设备绝对不会领错品牌 Keyboard myKeyboard factory.createKeyboard(); Mouse myMouse factory.createMouse(); myKeyboard.type(); myMouse.click(); } }敲击机械朋克键盘咔哒咔哒有劲 点击朋克鼠标RGB发光炫酷触发全程通过PunkFactory统一打包出产如果有一天老板决定全工作室换成极简风只需将new PunkFactory()改为new MinimalistFactory()后续所有生成外设的代码一字不改完美实现成套组装与一键切换。抽象工厂模式的核心术语与演进产品等级结构Product Class即产品的类型。比如“键盘”是一个产品等级“鼠标”是另一个产品等级。在代码里就是它们各自的顶级接口。产品族Product Family由同一个具体工厂生产位于不同产品等级结构中的一组产品。比如“朋克风键盘 朋克风鼠标”共同构成了“朋克产品族”。退化为工厂方法当抽象工厂类里只含有一个创建产品的方法时即只有一个产品等级比如只生产键盘抽象工厂模式就自动退化成了普通的工厂方法模式。搭配单例模式使用在实际开发中具体工厂类比如上面的PunkFactory在全系统中通常只需要存在一个实例就足够了因此具体工厂经常结合单例模式Singleton共同实现。适用场景多套 UI 皮肤/主题切换例如跨平台桌面软件需要同时支持 Windows 和 macOS 风格的控件按钮、文本框、滚动条游戏系统内的套装功能火系护甲火系武器 vs 冰系护甲冰系武器多数据库兼容架构系统需要同时兼容 MySQL 和 Oracle由于数据库连接Connection、命令操作Command、结果集ResultSet必须彼此配套极其适合用抽象工厂统一生产硬件设备生态套件比如不同品牌的智能家居控制系统苹果 HomeKit 协议芯片组件 vs 小米米家协议组件多环境基础组装在软件工程中针对开发环境Dev、测试环境Test和生产环境Prod分别成套提供不同的日志记录器、缓存解析器与网络请求客户端。

相关新闻

Mac安装Codex桌面端:从芯片确认到性能优化

Mac安装Codex桌面端:从芯片确认到性能优化

1. Codex 桌面端简介与下载准备 Codex 是 OpenAI 推出的 AI 编程助手,其桌面端应用为开发者提供了更强大的本地化工作支持。对于 Mac 用户而言,安装过程需要特别注意芯片架构差异和系统兼容性。以下是安装前的关键准备工作: 芯片架构确认 …

2026/7/22 3:22:02 阅读更多 →
SASAM模块:轻量化多尺度注意力机制在CV中的应用

SASAM模块:轻量化多尺度注意力机制在CV中的应用

1. 项目概述:SASAM模块的核心价值在计算机视觉领域,注意力机制已经成为提升模型性能的标配组件。但传统注意力模块往往面临两个痛点:计算复杂度高导致推理速度下降,以及单一尺度特征处理难以适应不同大小的目标。SASAM&#xff08…

2026/7/22 3:22:02 阅读更多 →
x86汇编中CALL与RET指令的深度解析

x86汇编中CALL与RET指令的深度解析

1. 汇编语言中的CALL与RET指令解析在x86汇编语言中,CALL和RET是一对相辅相成的指令组合,构成了子程序调用的基础机制。这对指令的工作方式直接影响着程序的控制流和栈管理,理解它们的底层原理是掌握汇编编程的关键。1.1 CALL指令的本质CALL指…

2026/7/22 3:22:02 阅读更多 →

最新新闻

C++部署性能优化实战:从编译到运行的全链路调优指南

C++部署性能优化实战:从编译到运行的全链路调优指南

1. 项目概述:为什么C部署性能优化是门硬功夫最近在社区里看到不少朋友在讨论C项目部署上线后,性能表现不及预期的问题。一个在开发机上跑得飞快的程序,一旦放到生产环境,响应延迟就上去了,资源消耗也居高不下。这其实是…

2026/7/22 4:40:33 阅读更多 →
没有编程基础能搭建外贸AI任务规划系统吗

没有编程基础能搭建外贸AI任务规划系统吗

在当今数字化时代,外贸行业竞争激烈,利用AI进行任务规划成为众多B2B从业者提升效率和竞争力的关键手段。很多没有编程基础的外贸跨境商家也想搭建外贸行业AI任务规划系统,那么这是否可行呢?答案是肯定的。下面我们就来详细探讨。外…

2026/7/22 4:40:33 阅读更多 →
YOLO11改进模型在粮虫检测中的实践与优化

YOLO11改进模型在粮虫检测中的实践与优化

1. 项目背景与核心挑战粮食储藏过程中的虫害识别一直是农业质检领域的痛点问题。传统人工抽检方式存在效率低、漏检率高的问题,而基于计算机视觉的自动化检测方案正逐渐成为行业新标准。我们团队在实际项目中发现,通用目标检测模型在应对粮仓复杂环境时存…

2026/7/22 4:40:33 阅读更多 →
知识图谱与Dify集成:RAG技术的企业级应用实践

知识图谱与Dify集成:RAG技术的企业级应用实践

1. 知识图谱与Dify集成的核心价值在当今企业级AI应用开发中,RAG(检索增强生成)技术已成为连接私有数据与大语言模型的关键桥梁。而知识图谱作为结构化数据的黄金标准,其与Dify平台的深度整合,能够为AI应用带来三个维度…

2026/7/22 4:40:33 阅读更多 →
XHS-Downloader小红书下载工具:零基础快速上手完整指南

XHS-Downloader小红书下载工具:零基础快速上手完整指南

XHS-Downloader小红书下载工具:零基础快速上手完整指南 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接&am…

2026/7/22 4:40:33 阅读更多 →
视频创作版权避坑指南:音乐、字体与图片安全使用方案

视频创作版权避坑指南:音乐、字体与图片安全使用方案

1. 视频创作中的版权避坑指南最近帮几个做自媒体的朋友处理了几起版权投诉,发现很多内容创作者对视频中的音乐、字体、图片版权问题存在严重认知盲区。今天就用我处理过的实际案例,拆解这三个最容易踩雷的版权陷阱。2. 音乐版权:看不见的高压…

2026/7/22 4:39:33 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 8:48:31 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 8:25:39 阅读更多 →

月新闻