利用策略模式优化if-else

一、定义

策略模式(Strategy Pattern):策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化.

二、优缺点

优点:

1.策略模式符合开闭原则。

2.可以避免使用多重条件判断。例如(if...else...等)

3.使用策略模式可以提高算法的保密性和安全性。

缺点:

1.使用方必须知道所有的策略,并且自行决定使用哪一个策略。

2.代码中会产生大量的策略类,增加维护难度。

三、代码实现

需求:我们有两个数字,要根据传入的type来判断这两个数字应该是相加,还是相减。

1.首先我们定义一个抽象类,或者接口

public interface CalculateService {

  void calculateValue(Integer number1, Integer number2);

}

2.接下来我们定义策略的工厂.

@Component
public class CalculateServiceFactory {

  @Resource
  private Map<String, CalculateService> calculateServiceStrategyMap = new ConcurrentHashMap<>(5);


  public CalculateService getCalculateServiceImpl(String type) {
    return calculateServiceStrategyMap.get(type);
  }

}

3.我们定义不同的实现类,重点在于bean的名字,bean的名字其实就是我们if...else判断的条件

减法的实现类 

@Slf4j
@Service("subtraction")
public class subtractionCalculateServiceImpl implements CalculateService {


  @Override
  public void calculateValue(Integer number1, Integer number2) {
    Integer result = number1 - number2;
    log.debug("策略模式====>计算类结果为" + result);
  }
}

加法的实现类 

@Service("addition")
@Slf4j
public class AdditionCalculateServiceImpl implements CalculateService {

  @Override
  public void calculateValue(Integer number1, Integer number2) {
    Integer result = number1 + number2;
    log.debug("策略模式====>计算类结果为" + result);
  }
}

4.策略模式与传统的if...else的比较

  public void calculateTraditionalMethod(String type) {
    Integer number1 = 1;
    Integer number2 = 2;

    if (type == "addition") {
      Integer result = number1 + number2;
      System.out.print("传统实现====>计算类结果" + result);
    } else if (type == "subtraction") {
      Integer result = number1 - number2;
      System.out.print("传统实现====>计算类结果" + result);
    }
  }

  @Autowired
  private CalculateServiceFactory calculateServiceFactory;

  
  //这里直接根据传入的type 去找到对应的bean 所以不需要进行判断
  public void calculateStrategyMethod(String type) {
    calculateServiceFactory.getCalculateServiceImpl(type);
  }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值