👋 你好,欢迎来到我的博客!我是【菜鸟不学编程】
我是一个正在奋斗中的职场码农,步入职场多年,正在从“小码农”慢慢成长为有深度、有思考的技术人。在这条不断进阶的路上,我决定记录下自己的学习与成长过程,也希望通过博客结识更多志同道合的朋友。
🛠️ 主要方向包括 Java 基础、Spring 全家桶、数据库优化、项目实战等,也会分享一些踩坑经历与面试复盘,希望能为还在迷茫中的你提供一些参考。
💡 我相信:写作是一种思考的过程,分享是一种进步的方式。
如果你和我一样热爱技术、热爱成长,欢迎关注我,一起交流进步!
全文目录:
🧠前言:讲真,再不换思路你都不好意思说自己是后端了!
最近在群里刷到一句话:“还在用 if-else 处理业务的后端,和用石头磨面的农夫,本质没差。”虽然听着有点扎心,但我当场笑出了声,因为我曾经就是那个“石头磨面”的人。
那时候写个业务逻辑,满屏幕的 if...else if...else...
,光是找个逻辑分支,脑子都快转晕了。后来,我猛然顿悟:优秀的架构,不是写出来让自己崩溃的,而是看着都想给自己点赞的!
今天这篇文章,就来跟各位兄弟姐妹唠唠——如何优雅地干掉满屏的 if-else,拥抱策略模式 + 工厂模式 + 枚举组合拳。不仅写起来爽,看起来顺,维护起来更是泪流满面地感谢过去的自己。
💣痛点:那年我在 if-else 的泥潭里打滚
你是不是也有这样的体验?
if ("ALIPAY".equals(payType)) {
// 支付宝支付
} else if ("WECHAT".equals(payType)) {
// 微信支付
} else if ("CASH".equals(payType)) {
// 现金支付
} else {
throw new RuntimeException("不支持的支付方式");
}
初看没啥问题,但想想未来呢?老板让你再加个 Apple Pay,你复制粘贴;财务说还要加积分抵扣?再复制粘贴;再加折扣券、优惠码、跨境结算……你自己看着都快吐了,别说团队协作和测试了。
🎯目标:打造高扩展、低耦合、超清晰的业务逻辑结构!
要解决这种“if地狱”,我们需要一套“高内聚、低耦合”的设计。方案就是——
- ✅ 使用 策略模式 将不同的业务逻辑解耦;
- ✅ 使用 工厂模式 实现“按需”调用;
- ✅ 使用 枚举 + 注解 来管理策略注册。
🛠实战案例:五分钟上手策略模式处理支付业务!
🧱第一步:定义支付策略接口
public interface PayStrategy {
void pay();
String getPayCode(); // 标识当前策略
}
🧱第二步:实现不同的支付策略类
@Component
public class AliPayStrategy implements PayStrategy {
@Override
public void pay() {
System.out.println("使用支付宝完成支付!");
}
@Override
public String getPayCode() {
return "ALIPAY";
}
}
@Component
public class WeChatPayStrategy implements PayStrategy {
@Override
public void pay() {
System.out.println("使用微信完成支付!");
}
@Override
public String getPayCode() {
return "WECHAT";
}
}
🧱第三步:策略工厂类(核心来了!)
@Component
public class PayStrategyFactory implements InitializingBean {
@Autowired
private List<PayStrategy> strategyList;
private final Map<String, PayStrategy> strategyMap = new HashMap<>();
@Override
public void afterPropertiesSet() {
for (PayStrategy strategy : strategyList) {
strategyMap.put(strategy.getPayCode(), strategy);
}
}
public PayStrategy getStrategy(String code) {
return strategyMap.get(code);
}
}
🧱第四步:业务类中调用策略
@Service
public class PayService {
@Autowired
private PayStrategyFactory payStrategyFactory;
public void doPay(String payType) {
PayStrategy strategy = payStrategyFactory.getStrategy(payType);
if (strategy == null) {
throw new RuntimeException("不支持的支付类型:" + payType);
}
strategy.pay();
}
}
🌈调用效果:
payService.doPay("ALIPAY");
// 输出:使用支付宝完成支付!
是不是清爽了许多?你以后要新增个策略,只要加个实现类,根本不碰主流程,哪怕来了 100 个支付方式都不怕!
🤯再升级!用枚举管理策略更优雅!
public enum PayTypeEnum {
ALIPAY("ALIPAY", "支付宝"),
WECHAT("WECHAT", "微信");
private final String code;
private final String desc;
PayTypeEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getCode() {
return code;
}
}
搭配策略工厂,代码更清晰易维护,团队合作也更默契!
🧩扩展思考:你以为这只是支付?不,它还能是…
别以为策略模式只能用在支付上,它还可以用在很多地方,比如:
- 🚗 订单状态处理(待付款、已发货、已签收、已退货)
- 📦 商品价格计算(打折、满减、会员价)
- 📄 Excel 导入校验(不同字段不同策略校验)
- 💬 消息推送渠道(短信、微信、邮件、钉钉)
这玩意儿就像“变形金刚”,用得好,能让系统柔软灵活,维护成本大降!
🔚结语:别再被 if-else 束缚你的才华!
写代码不是拼体力,更不是堆砌逻辑砖块。我们要做的,是写出让未来的你看了想哭着给你比心的代码!
策略 + 工厂 + 枚举,这一套组合拳打下来,不光代码好看,关键是扩展性强、可维护性高、团队协作顺滑——你值得拥有!
文章写到这儿,朋友,你有没有想起自己曾经写过的“满屏 if-else”?有没有想要立马把那些代码删了重写?嘿嘿,别急,点赞收藏评论三连之后,咱再一起搞!
📌如果你觉得本文对你有启发,不妨转发给团队的小伙伴,一起告别 if 地狱,拥抱架构思维!
📝 写在最后
如果你觉得这篇文章对你有帮助,或者有任何想法、建议,欢迎在评论区留言交流!你的每一个点赞 👍、收藏 ⭐、关注 ❤️,都是我持续更新的最大动力!
我是一个在代码世界里不断摸索的小码农,愿我们都能在成长的路上越走越远,越学越强!
感谢你的阅读,我们下篇文章再见~👋