第4篇:抽象工厂模式——产品族一键创建

第4篇:抽象工厂模式------产品族一键创建

摘要:当需要创建一系列相互关联的产品(产品族)时,抽象工厂模式能保证风格统一、一键切换。本文详解其实现、优缺点,并指出其适用场景。

本文是《Java 23 种设计模式:从踩坑到精通》工厂模式长文的扩充短文第4篇,帮助你碎片化掌握核心知识点。


你有没有写过这样的代码?

java 复制代码
// 抽象工厂
public interface GUIFactory {
    Button createButton();
    TextField createTextField();
}

// 具体工厂:Windows风格
public class WinFactory implements GUIFactory {
    @Override
    public Button createButton() { return new WinButton(); }
    @Override
    public TextField createTextField() { return new WinTextField(); }
}

// 具体工厂:Mac风格
public class MacFactory implements GUIFactory {
    @Override
    public Button createButton() { return new MacButton(); }
    @Override
    public TextField createTextField() { return new MacTextField(); }
}

工厂方法解决的是单一产品 的创建问题。但现实中,我们常需要创建一系列相互关联的产品------比如跨平台UI组件,按钮和文本框必须风格统一(全是Windows风格或全是Mac风格)。

抽象工厂模式正是为此而生:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

客户端只需切换工厂实例,就能整体换肤:

java 复制代码
GUIFactory factory = new WinFactory();  // 切换这里
Button button = factory.createButton(); // 一定是Win风格
TextField textField = factory.createTextField(); // 一定是Win风格

你的场景该不该用抽象工厂?
判断标准 是 → 用抽象工厂 否 → 用其他方式
产品成族出现,需要保证风格/协议一致 ✅ ❌
需要整体切换产品族(如换UI主题) ✅ ❌
产品种类少且不成族 ❌ 简单工厂或工厂方法
产品等级结构可能频繁新增 ❌ 考虑工厂方法

一句话总结:产品成族出现、需要整体切换 → 用抽象工厂,保证成套一致。


📖 完整长文入口:本文是工厂模式扩充系列的第4篇。如果你想一次性阅读完整内容(含UML、三种工厂对比、框架源码、面试追问等),请查看原长文:

👉 《Java 23 种设计模式:从踩坑到精通 | 工厂模式》

🔗 系列导航:

相关推荐
杨杨杨大侠6 小时前
都能接模型、RAG 和 MCP,Java Agent 框架到底差在哪?
java
Thinker QAQ7 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
霸道流氓气质8 小时前
RAG 可观测性与生产监控实战:四层遥测模型、五大仪表盘与 OpenTelemetry 全链路追踪的 Java 生产级实现
java·人工智能·python
AOI小白新手上路8 小时前
autodl常用的tar 打包下载(数据集)命令手册:逐段拆解与套用模板
java·大数据·数据库
dishugj10 小时前
系统架构风险点、敏感点和权衡点的概念和区分
java·开发语言
高晶10 小时前
ARM 嵌入式 Linux 系统启动流程实战指南
设计模式·程序员
苜蓿muxu10 小时前
常用代码命名规范
java
高晶10 小时前
BMS 通信开发实战:从 PMBus 协议到数据采集的完整指南
设计模式·程序员
geovindu10 小时前
rust:Memento Pattern(续)
开发语言·后端·设计模式·rust·行为模式·备忘录模