第1篇:一段 if-else 的代码,为什么成了“屎山”?

📅 2026/7/6 9:10:38 👁️ 阅读次数 📝 编程学习
第1篇:一段 if-else 的代码,为什么成了“屎山”?

第1篇:一段 if-else 的代码,为什么成了“屎山”?

摘要:一段 if-else 创建对象的代码为何被称为“屎山”?本文从真实痛点出发,揭示工厂模式如何通过封装对象创建过程实现解耦,并附上场景判断表,帮你快速决策何时使用工厂模式。

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


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

if(type.equals("sms")){sender=newSmsSender();}elseif(type.equals("email")){sender=newEmailSender();}elseif(type.equals("wechat")){sender=newWechatSender();}

每次新增一种消息渠道,就得在这段if-else后面再加一行。代码越写越长,维护越来越痛苦。更可怕的是,如果有一天SmsSender的构造方法改了,所有写new SmsSender()的地方都得跟着改,一不小心就会漏掉。

工厂模式正是为此而生

它把“创建对象”这件事从业务代码中抽离出来,交给专门的工厂类处理。调用方只需要告诉工厂“我要什么”,工厂返回一个符合接口的对象,至于具体是怎么创建的,调用方根本不需要关心。


你的场景该不该用工厂模式?
判断标准是 → 用工厂模式否 → 用其他方式
创建对象的逻辑分散在多处,且经常变化
需要根据运行时条件动态决定创建哪种对象
希望客户端代码只依赖抽象接口,不依赖具体类
产品种类极少(≤2种)且永远不会变直接 new 即可

一句话总结:创建逻辑复杂、容易变化、需要解耦 → 用工厂模式,告别硬编码。


📖 完整长文入口:​ 本文是工厂模式扩充系列的第1篇。如果你想一次性阅读完整内容(含UML、三种工厂对比、框架源码、面试追问等),请查看原长文:
👉 《Java 23 种设计模式:从踩坑到精通 | 工厂模式》
🔗 系列导航:
上一篇:无(本篇为首篇)
下一篇:第2篇:简单工厂模式——把if-else搬个家
返回:《工厂模式 · 扩充系列》目录
返回:《Java 23 种设计模式:从踩坑到精通 》总目录