《设计模式的运用》使用策略模式+工厂模式优化代码中的if else
使用策略模式优化if else
有这样一段逻辑
function{ for{ if() if() if( if( ) ) ... } }
公司有的祖传的代码,是一段规则校验,校验的越多,每一个请求都会进来校验,加上后来的开发人员也不注意,每次多加校验就多加一个if,只要命中就在if里面写逻辑,好一点的会抽到一个方法中,看起来稍好些,但是if越加越多,一个循环最终发展到了数千行,可读性越来越差,领导点名重构;
解决方案: 策略模式+工厂模式
工厂模式大家都很熟悉了,所以简单介绍一下策略模式
策略模式,顾名思义,组要是依靠策略来完成类的具体行为,所以,策略模式的核心就是编写不同的策略类,我们可以通过Java的接口编写抽象策略,用不同的实现类来完成策略,当然策略模式还需要一个上下文的类,用来选择策略;现实生活中也有很好的例子,例如支付方式,你可以选择微信支付,支付宝支付,银行卡支付等,
首先我们编写抽象策略
public interface Strategy { Boolean check(Object obj); }
然后我们编写具体的实现
public class StrategyImpl01 implements Strategy{ @Override public int check(Object obj) { // 实现具体的业务逻辑 return ""; } } public class StrategyImpl02 implements Strategy{} public class StrategyImpl03 implements Strategy{} ...
实现上下文类
public class Context { private Strategy strategy; public Context(Strategy strategy){ this.strategy = strategy; } public int executeStrategy(Object obj){ return strategy.check(obj); } }
调用策略类
public static void main(String[] args) { Context context = new Context(new StrategyImpl01()); context.check(obj) context = new Context(new StrategyImpl02()); context.check(obj) context = new Context(new StrategyImpl03()); context.check(obj) }
到此,策略模式已经实现了,但是不是特别优雅,所以我们加上了工厂模式
编写策略工厂
public clss Factory{ // 申明一个全局的map,key 为if中的条件,value为策略类 private static final Map<String,Strategy> strategyMap = new HashMa<String,Strategy>(); // 填充map static { strategyMap.put("aaa",new StrategyImpl01()) strategyMap.put("bbb",new StrategyImpl02()) strategyMap.put("bbb",new StrategyImpl03()) ... } // 暴露一个获取map的方法 public static Strategy getStrategy(String key){ return strategyMap.get(key).check(obj) } }
这样,我们只需要在用的时候
public static void main(String[] args){ Factory.getStrategy(key); }
看起来优雅多了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南