当前位置: 首页 > news >正文

第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 种设计模式:从踩坑到精通 》总目录

http://www.gsyq.cn/news/1645782.html

相关文章:

  • 基于Docker与Kubernetes的WebdriverIO自动化测试环境容器化实践
  • 手机号码定位神器:3分钟快速查询归属地完整指南
  • Wireshark+Fiddler手机抓包全攻略:从环境搭建到HTTPS解密与深度分析
  • Python爬虫如何绕过TLS指纹检测?curl_cffi实战指南
  • 语法全对,物理全错:2026年最危险的AI幻觉,正在污染你的仿真库
  • Android应用安全加固实战:代码混淆、资源加密、SO加固与完整性校验
  • 基于智普清言与LangChain构建私有化AI知识库:从架构设计到部署实践
  • iOS 17+隐私合规实战:从Reachability案例解析PrivacyInfo.xcprivacy配置
  • Cerast 智能:可查找域名暴露路径与配置错误,支持子字符串搜索
  • Java安全随机数生成:从Random漏洞到SecureRandom实战
  • 寄生感知共质心布局生成:集成布线优化的 3 步单元电容尺寸最小化方法
  • 【复现】配电网对分布式电源和电动汽车的承载力评估及提升方法综述(Matlab代码实现)
  • WebPack与JQuery安全检测:从打包到拆包的前端攻防实战
  • 基于开源AI与本地化部署的智能合同管理系统构建指南
  • 如何用哔哩下载姬高效管理你的B站视频收藏库
  • 开源热力图实战:基于OWA的用户点击行为可视化与深度分析
  • 防火玻璃到底是不是安全玻璃(二)
  • 基于微信小程序的校园食堂点餐订餐系统设计与实现
  • ResNet 残差块 2 种结构对比:Identity Block 与 Conv Block 的 3 大差异与适用场景
  • ONNX Runtime 1.19 GPU 安装避坑:CUDA 12.x/11.x 版本精确匹配与 3 步验证法
  • HSAK故障排查手册:常见问题分析与解决方案
  • UVa 628 Password
  • GitHub资源列表自动化维护:链接监控与README生成实战
  • JMeter分布式性能测试实战:从架构原理到避坑指南
  • Cantian connector for MySQL部署最佳实践:CentOS平台完整配置指南
  • TOTP双因素认证时钟同步原理与终极解决方案
  • 从RAG到智能体:构建工程化Agentic RAG系统的完整指南
  • 如何快速上手MLCacheDirect?从安装到基本使用的完整指南
  • UVa 627 The Net
  • Fable 5代理编码的瓶颈转移 地图领土与四类未知的系统拆解