项目中如何拒绝使用大量的if else

问题

        在平时的项目中有很多中场景会导致我们使用if else去判断,从而对满足相应的条件的数据做出不同的处理,但是if else出现太多后会导致可读性变差,可维护性变低,可扩展性也很难(主要需要修改原有的代码) 

例如:

 

if("1".equals(wirtType)){
    do something
}else if("2".equals(wirtType)){
    do something
}
...

策略模式

        在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

        在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

        本次使用的是Springboot项目,采用策略模式解决项目中过多的IF ELSE

 代码

 StrategyContext:主要利用Spring的发现机制,将所有的处理业务逻辑的类注入到Map中,方便使用的时候根据类型获取相应的处理逻辑,如果不是通过自动注入,需要手动将处理逻辑的类放入到Map中


/**
 * @description:
 */
@Service
public class WritMakeStrategyContext {

    @Autowired
    private Map<String,WritMakeHandleStrategy> writMakeHandleStrategyMap = new ConcurrentHashMap<String,WritMakeHandleStrategy>();

    /**
     * 利用Spring的发现机制,将数据自动注入到这里
     */
    public WritMakeStrategyContext(Map<String,WritMakeHandleStrategy> writMakeHandleStrategyMap){
        this.writMakeHandleStrategyMap.clear();
        writMakeHandleStrategyMap.forEach((k,v) -> this.writMakeHandleStrategyMap.put(k,v));
    }

    /**
     * 执行业务
     */
    public String handleWritMake(WritMakeDataVo writMakeDataVo){
        Assert.notEmpty(writMakeDataVo.getWritType(),"文书类型不能为空");
        WritMakeHandleStrategy writMakeHandleStrategy = this.writMakeHandleStrategyMap.get(writMakeDataVo.getWritType());
        Assert.notNull(writMakeHandleStrategy,"未找到的文书类型");
        return writMakeHandleStrategy.handleWritMake(writMakeDataVo);
    }
}

StrategyIntefer:处理逻辑的接口

public interface WritMakeHandleStrategy {
    /**
     * description 处理文书数据
     */
    String handleWritMake(WritMakeDataVo writMakeDataVo);
}

StrategyImpl:处理逻辑实现类

/**
 * @description: 处理1数据
 */
@Component("1")
public class Writ01HandleStrategy implements WritMakeHandleStrategy {

    @Override
    @Transactional(rollbackFor = Exception.class)
    public String handleWritMake(WritMakeDataVo writMakeDataVo) {
 

        return "01";
    }
}

/**
 * @description: 处理2数据
 */
@Component("2")
public class Writ01HandleStrategy implements WritMakeHandleStrategy {

    @Override
    @Transactional(rollbackFor = Exception.class)
    public String handleWritMake(WritMakeDataVo writMakeDataVo) {
 

        return "02";
    }
}

...

 结束,就是这么简单,这样的方式就算有新的类型也不影响现有的数据,当然如果类型确定的就那么两三个也不必要用这种方式 。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值