第2篇:简单工厂模式——把if-else搬个家
摘要:简单工厂把 if-else 从业务代码搬到了工厂类,实现了初步解耦。本文详细讲解其实现方式、优缺点,并指出它的核心缺陷——依然违反开闭原则,适合产品种类少的场景。
本文是《Java 23 种设计模式:从踩坑到精通》工厂模式长文的扩充短文第2篇,帮助你碎片化掌握核心知识点。
你有没有写过这样的代码?
publicclassSenderFactory{publicstaticSendercreate(Stringtype){switch(type){case"sms":returnnewSmsSender();case"email":returnnewEmailSender();default:thrownewIllegalArgumentException("未知渠道");}}}简单工厂是最直接的工厂形态:一个工厂类,一个静态方法,根据参数返回不同产品。调用方瞬间清爽了:
Sendersender=SenderFactory.create("sms");sender.send("你好");但问题并没有消失——if-else 只是从业务代码搬到了工厂类里。新增产品还是要改工厂类,依然违反开闭原则。
你的场景该不该用简单工厂?
| 判断标准 | 是 → 用简单工厂 | 否 → 用其他方式 |
|---|---|---|
| 产品种类少(≤3种)且基本不变 | ✅ | ❌ |
| 只想快速解耦,不想引入过多类 | ✅ | ❌ |
| 产品种类多或频繁新增 | ❌ | 考虑工厂方法 |
| 需要遵循开闭原则 | ❌ | 考虑工厂方法 |
一句话总结:简单工厂是工厂模式的“最小可用版本”,够用就好,别过度设计。
📖完整长文入口: 本文是工厂模式扩充系列的第2篇。如果你想一次性阅读完整内容(含UML、三种工厂对比、框架源码、面试追问等),请查看原长文:
👉 《Java 23 种设计模式:从踩坑到精通 | 工厂模式》
🔗 系列导航:
上一篇:第1篇:一段 if-else 的代码,为什么成了“屎山”?
下一篇:第3篇:工厂方法模式——把变化隔离到子类
《工厂模式 · 扩充系列》目录
《Java 23 种设计模式:从踩坑到精通》总目录