设计模式-抽象工厂模式
抽象工厂模式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/26 12:56:21 阅读更多 →
SASAM模块:轻量化多尺度注意力机制在CV中的应用

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

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

2026/7/26 12:41:03 阅读更多 →
x86汇编中CALL与RET指令的深度解析

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

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

2026/7/26 8:56:35 阅读更多 →

最新新闻

图形化编程与密室逃脱:用行空板打造交互式解谜游戏

图形化编程与密室逃脱:用行空板打造交互式解谜游戏

1. 项目概述:当密室逃脱遇上图形化编程最近在带学生做项目,发现一个挺有意思的现象:很多孩子对编程的逻辑和算法感到头疼,但一提到做游戏,尤其是密室逃脱这类带点解谜性质的,眼睛立马就亮了。这给了我一个启…

2026/7/28 4:28:19 阅读更多 →
LangChain与LCEL:AI应用开发的高效框架解析

LangChain与LCEL:AI应用开发的高效框架解析

1. LangChain与LCEL基础认知:为什么说它是AI应用开发的"瑞士军刀"?在当今AI应用开发领域,LangChain已经成为连接大语言模型(LLM)与实际业务场景的桥梁型框架。而LCEL(LangChain Expression Langu…

2026/7/28 4:28:18 阅读更多 →
如何在浏览器中完整体验macOS系统:Web端macOS桌面环境深度探索

如何在浏览器中完整体验macOS系统:Web端macOS桌面环境深度探索

如何在浏览器中完整体验macOS系统:Web端macOS桌面环境深度探索 【免费下载链接】macos-web 项目地址: https://gitcode.com/gh_mirrors/ma/macos-web macOS Web是一个创新的开源项目,它让你能在任何现代浏览器中体验完整的macOS桌面环境。无需苹…

2026/7/28 4:28:18 阅读更多 →
8款论文降重工具实测对比与优化策略

8款论文降重工具实测对比与优化策略

1. 毕业季论文降重实战指南最近帮学弟学妹们改论文时,发现大家都在为查重率发愁。作为经历过三次毕业论文洗礼的老手,我实测了8款主流降重工具,发现不同工具在应对知网、维普等权威查重系统时表现差异巨大。这篇实测报告将帮你避开那些华而不…

2026/7/28 4:28:18 阅读更多 →
动态规划核心应用:最长公共子序列(LCS)算法详解与C++实现

动态规划核心应用:最长公共子序列(LCS)算法详解与C++实现

1. 项目概述:从“找不同”到“找相同”的算法思维最近在带新人做算法复盘,发现很多朋友对“最长公共子序列”这个概念,一听就懂,一写就懵。这问题在C面试里,尤其是考察动态规划时,出场率极高。它不像排序、…

2026/7/28 4:28:18 阅读更多 →
2026最新!商标注册全流程避坑指南,这5个雷区千万别踩

2026最新!商标注册全流程避坑指南,这5个雷区千万别踩

2026最新!商标注册全流程避坑指南,这5个雷区千万别踩2026年6月,《商标法》迎来四十余年来首次全面修订,条文由73条增至87条,将于2027年1月1日起施行-1。新法在收紧注册规则的同时,也赋予了商标管理部门更多…

2026/7/28 4:27:17 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻