if else与策略模式
1、前言
学习策略模式,对于大量的if else逻辑可以进行替换,使代码变得更加优雅简洁。
2、编写
①传统if else
使用if else
对arg
进行判断,对于不同的判断进行不同的逻辑操作;
public class Simple { void simple(String arg){ if ("1".equals(arg)){ //操作1 }else if ("2".equals(arg)){ //操作2 } } }
②策略模式(未完成版)
假设传入level为vip等级,对于不同等级进行不同会员等级的操作
一.策略抽象接口
定义一个策略接口,不同VIP等级操作类实现该接口
public interface VIPStrategy { public void handle(); }
二.策略实现类
一级VIP实现类:
public class VIP1StrategyImpl implements VIPStrategy{ @Override public void handle() { System.out.println("会员等级1"); } }
二级VIP实现类:
public class VIP2StrategyImpl implements VIPStrategy{ @Override public void handle() { System.out.println("会员等级2"); } }
三.策略工厂
通过level参数返回不同的策略实现类,进行操作
public class VIPStrategyFactory { public static final Map<String,VIPStrategy> map=new HashMap<>(); static { map.put("vip1",new VIP1StrategyImpl()); map.put("vip2",new VIP2StrategyImpl()); } public static VIPStrategy getVipStrategy(String level) { return map.get(level); } }
四.对比if else
public class NotGood { void notGood(String arg){ VIPStrategy vipStrategy = VIPStrategyFactory.getVipStrategy(arg); vipStrategy.handle(); } }
③策略模式(完成版)
上面我们使用具体的VIPStrategy
实现类进行了处理,如果我们对VIP需要添加通用方法,可以使用上下文(装饰器模式)封装他们的通用处理:在execute执行方法中,添加通用操作:
public class VIPContext { private VIPStrategy vipStrategy; public VIPContext(VIPStrategy vipStrategy) { this.vipStrategy = vipStrategy; } public void executeStrategy(){ System.out.println("VIP通用处理"); vipStrategy.handle(); } }
编写完成,简单测试一下:
public class Good { void good(String arg){ VIPStrategy vip1 = VIPStrategyFactory.getVipStrategy("vip1"); VIPContext vipContext = new VIPContext(vip1); vipContext.executeStrategy(); } public static void main(String[] args) { Good good = new Good(); good.good("vip1"); } }
3、总结
使用策略模式代替if else确实能让代码的逻辑更加清晰,但是仅限于大量的if else,使用策略模式可以观察到,代码量会急剧膨胀
我的建议:
1-3个分支:if else
3-5个分支:switch
更多:使用策略模式
不过还是看个人的喜好,按你的选择即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix