几行代码,优雅的实现策略模式

这一篇文章不长,主要就是通过几行代码来实现一个我们常说的策略模式

什么策略模式

比如我们需要实现一个两个数的加、减、乘、除的计算器。

一般的写法会这样子写:

计算器实现方法ifelse版本

或者

计算器实现方法switch版本

上边都是很直男的解决方式,为了后期方便扩展,而又对原来的代码无侵入性,其实可以使用策略模式根据我们的运算符号来对两个数字作不同的运算这是我们抽象出来的需求。

基于我们Spring注解,可以很简单的实现我们的策略模式(这一点被同事笑话了,包括我之前的《自定义注解》文章里面,都用到了代理模式来实现策略模式,后来发现是交了代码智商税。)

基于Spring注解的解决方案

创建计算器接口类

@Service
public interface ICalc {
    /**
     * 计算器的运算方法
     * @param i
     * @param j
     * @return
     */
    int operation(int i, int j);
}

分别创建加减乘除运算类

@Service("add")
public class AddCalc implements ICalc{
    @Override
    public int operation(int i, int j) {
        return i+j;
    }
}

@Service("sub")
public class SubCalc implements ICalc{

    @Override
    public int operation(int i, int j) {
        return i-j;
    }
}

@Service("mult")
public class MultCalc implements ICalc{
    @Override
    public int operation(int i, int j) {
        return i*j;
    }
}

@Service("div")
public class DivCalc implements ICalc{
    @Override
    public int operation(int i, int j) {
        return i/j;
    }
}

依赖注入使用:

@Autowired
Map<String, ICalc> calcMap;

调用控制器:

/**
 * 调用的URL:
 * http://127.0.0.1:8001/user/calc/add 加法调用
 * http://127.0.0.1:8001/user/calc/sub 减法调用
 * http://127.0.0.1:8001/user/calc/mult 乘法调用
 * http://127.0.0.1:8001/user/calc/div 除法调用
 * @param opStr 运算符
 * @return
 */
@GetMapping(path = "/calc/{opStr}")
public String op(@PathVariable String opStr) {
  ICalc calc = calcMap.getOrDefault(opStr, null);
  if (null == calc) {
    return "没有找到正确的策略";
  }

  int i = 1;
  int j = 2;
  return calc.operation(i, j) + "";
}

总结

依赖Spring的依赖注入实现优雅的策略模式,告别各种if elseswitch以及代理或者自定义注解实现策略模式

完整的代码:https://github.com/lianbian/EhCache

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值