使用策略模式优化IF ELSE

使用传统的if else扩展性不强,代码量越多阅读起来越困难

如果后期又要扩展条件语句维护起来就会变得非常的麻烦

  /**
     * 传统的If else 不容易扩展 代码量大的情况下代码阅读性不高
     * @param args
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入a,b,c,d四个字符中的任意一个");
        String traditionIfElse = scanner.next();
        //四层if else 看起来还好 但是如果代码量的增加就会导致阅读性越来越低
        if ("a".equals(traditionIfElse)){
            System.out.println("a");
        }else if ("b".equals(traditionIfElse)){
            System.out.println("b");
        }else if ("c".equals(traditionIfElse)){
            System.out.println("c");
        }else if ("d".equals(traditionIfElse)){
            System.out.println("d");
        }else {
            System.out.println("瞎瘠薄输入");
        }
    }

执行效果 

 

因此我们可以用策略模式来优化if else的代码让它变得更加的精简

统一的访问路径

public interface StrategyContext {
    /**
     * 文本输入
     * @param
     * @return
     */
    String strategyTest();
}

A实现类 

public class AtypeImplementation implements StrategyContext {

    @Override
    public String strategyTest() {return "a";}
}

B实现类

public class BtypeImplementation implements StrategyContext {

    @Override
    public String strategyTest(){return "b";}
}

C实现类

public class CtypeImplementation implements StrategyContext {

    @Override
    public String strategyTest() {
        return "c";
    }
}

D实现类

public class DtypeImplementation implements StrategyContext {

    @Override
    public String strategyTest() {
        return "d";
    }
}

 在使用枚举类型做工厂模式

public enum StrategyEnum {
    a("a",new AtypeImplementation()),
    b("b",new BtypeImplementation()),
    c("c",new CtypeImplementation()),
    d("d",new DtypeImplementation())
    ;

    private String text;
    private StrategyContext strategyContext;

    StrategyEnum(String text, StrategyContext strategyContext) {
        this.text = text;
        this.strategyContext = strategyContext;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public StrategyContext getStrategyContext() {
        return strategyContext;
    }

    public void setStrategyContext(StrategyContext strategyContext) {
        this.strategyContext = strategyContext;
    }
}

 main测试

public class StrategyIfElse {
    /**
     * 使用策略模式优化
     * @param args
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入a,b,c,d四个字符中的任意一个");
        String traditionIfElse = scanner.next();
        //使用枚举值优化if else
        StrategyContext strategyContext = StrategyEnum.valueOf(traditionIfElse).getStrategyContext();
        System.out.println(strategyContext.strategyTest());
    }
}

 

 效果和if else是一样的,但是代码变得精简了,后期的扩展也变得简单明了了

如果配合spring使用的话我们可以只需将Bean注入到IOC容器当中 直接使用getBean将实例代码获取出来这样就可以不用写枚举类型 

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值