if else与策略模式

1、前言

学习策略模式,对于大量的if else逻辑可以进行替换,使代码变得更加优雅简洁。

2、编写

①传统if else

使用if elsearg进行判断,对于不同的判断进行不同的逻辑操作;

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");
}
}

image-20230308191938718

3、总结

使用策略模式代替if else确实能让代码的逻辑更加清晰,但是仅限于大量的if else,使用策略模式可以观察到,代码量会急剧膨胀

我的建议:

1-3个分支:if else

3-5个分支:switch

更多:使用策略模式

不过还是看个人的喜好,按你的选择即可

posted @   yikolemon  阅读(166)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示