第4篇:抽象工厂模式——产品族一键创建
摘要:当需要创建一系列相互关联的产品(产品族)时,抽象工厂模式能保证风格统一、一键切换。本文详解其实现、优缺点,并指出其适用场景。
本文是《Java 23 种设计模式:从踩坑到精通》工厂模式长文的扩充短文第4篇,帮助你碎片化掌握核心知识点。
你有没有写过这样的代码?
// 抽象工厂publicinterfaceGUIFactory{ButtoncreateButton();TextFieldcreateTextField();}// 具体工厂:Windows风格publicclassWinFactoryimplementsGUIFactory{@OverridepublicButtoncreateButton(){returnnewWinButton();}@OverridepublicTextFieldcreateTextField(){returnnewWinTextField();}}// 具体工厂:Mac风格publicclassMacFactoryimplementsGUIFactory{@OverridepublicButtoncreateButton(){returnnewMacButton();}@OverridepublicTextFieldcreateTextField(){returnnewMacTextField();}}工厂方法解决的是单一产品的创建问题。但现实中,我们常需要创建一系列相互关联的产品——比如跨平台UI组件,按钮和文本框必须风格统一(全是Windows风格或全是Mac风格)。
抽象工厂模式正是为此而生:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
客户端只需切换工厂实例,就能整体换肤:
GUIFactoryfactory=newWinFactory();// 切换这里Buttonbutton=factory.createButton();// 一定是Win风格TextFieldtextField=factory.createTextField();// 一定是Win风格你的场景该不该用抽象工厂?
| 判断标准 | 是 → 用抽象工厂 | 否 → 用其他方式 |
|---|---|---|
| 产品成族出现,需要保证风格/协议一致 | ✅ | ❌ |
| 需要整体切换产品族(如换UI主题) | ✅ | ❌ |
| 产品种类少且不成族 | ❌ | 简单工厂或工厂方法 |
| 产品等级结构可能频繁新增 | ❌ | 考虑工厂方法 |
一句话总结:产品成族出现、需要整体切换 → 用抽象工厂,保证成套一致。
📖完整长文入口:本文是工厂模式扩充系列的第4篇。如果你想一次性阅读完整内容(含UML、三种工厂对比、框架源码、面试追问等),请查看原长文:
👉 《Java 23 种设计模式:从踩坑到精通 | 工厂模式》
🔗 系列导航:
- 上一篇:第3篇:工厂方法模式——把变化隔离到子类
- 下一篇:第5篇:工厂方法 vs 抽象工厂——别再傻傻分不清
- 返回: 《工厂模式·扩充系列》目录
- 返回:《Java 23种设计模式:从踩坑到精通》总目录