重构 switch 使用 工厂+策略

往常的代码

       switch (zeroOrderRequest.getReceiveType()){
            case 11: 
            	return receiveOrder(zeroOrderRequest, orderZeroLoadModel, orderZeroLoadModelTemp);
            case 12: 
            	return auditPassOrder(zeroOrderRequest, orderZeroLoadModel, orderZeroLoadModelTemp);
            case 13: 
            	return auditRefuseOrder(zeroOrderRequest, orderZeroLoadModel, orderZeroLoadModelTemp);
            default:return 
            	R.error("valid receiveType");
        }

听架构师说这样的代码 一点不优雅 重构为 一个工厂 + 枚举 + 策略实现

创建一个 工厂


/**
 * 伯乐操作运单工厂
 */
@Component
public class OperationOrderFactory {
	
	
	#动态注入 实现这个service 的
    @Autowired
    List<OperationOrderService> operationOrderServiceList;

    private Map<Integer, OperationOrderService> handleMap = new HashMap<>();

	# 初始化
    @PostConstruct
    public void init() {
        if (CollectionUtils.isNotEmpty(operationOrderServiceList)) {
            operationOrderServiceList.forEach(operationOrderService -> {
                handleMap.put(operationOrderService.getType().getCode(), operationOrderService);
            });
        }
    }

    public OperationOrderService getInstance(Integer disType) {
        if (!handleMap.containsKey(disType)) {
            return handleMap.get(OperationOrderEnum.ERROR_REQUEST.getCode());
        }
        return handleMap.get(disType);
    }
}

创建一个service


/**
 * dongzhiwei
 * 操作订单服务 用来策略模式
 */
public interface OperationOrderService {
    /**
     * 操作 运单方法
     * @param zeroOrderRequest
     * @param orderZeroLoadModel
     * @param orderZeroLoadModelTemp
     * @return
     */
    R OperationOrderMethod(ZeroOrderRequest zeroOrderRequest, OrderZeroLoadModel orderZeroLoadModel, OrderZeroLoadModel orderZeroLoadModelTemp);

    /**
     * 获取用来确认不同 实现的方法
     * @return
     */
    OperationOrderEnum getType();

}

然后几个实现这个服务 就可以了


/**
 *  14 应付改单审单通过
 */
@Component
@Slf4j
public class ApplyPassOrderImpl implements OperationOrderService {

    @Resource
    FengYuService fengYuService;

    @Resource
    FyConfig fyConfig;

    @Override
    public R OperationOrderMethod(ZeroOrderRequest zeroOrderRequest, OrderZeroLoadModel orderZeroLoadModel, OrderZeroLoadModel orderZeroLoadModelTemp) {
        log.info("订单号{},申请应付改单申请通过",zeroOrderRequest.getZeroLoadOrderNumber());
        return fengYuService.postJson(fyConfig.getApplyZeroLoadPassUrl(), JSONUtil.toJsonStr(zeroOrderRequest));
    }

    @Override
    public OperationOrderEnum getType() {
        return OperationOrderEnum.APPLY_PASS_ORDER;
    }
}

/**
 * 15 应付改单审单拒绝
 */
@Component
@Slf4j
public class ApplyRefuseOrderImpl implements OperationOrderService {

    @Resource
    OrderZeroLoadDao orderZeroLoadDao;

    @Override
    public R OperationOrderMethod(ZeroOrderRequest zeroOrderRequest, OrderZeroLoadModel orderZeroLoadModel, OrderZeroLoadModel orderZeroLoadModelTemp) {
        log.info("审单拒绝,订单号{}",zeroOrderRequest.getZeroLoadOrderNumber());
        orderZeroLoadDao.updateApplyStateByOrderNumber(zeroOrderRequest);
        return R.ok();
    }

    @Override
    public OperationOrderEnum getType() {
        return OperationOrderEnum.APPLY_REFUSE_ORDER;
    }
}

调用就可以了

        R r = operationOrderFactory.getInstance(zeroOrderRequest.getReceiveType()).OperationOrderMethod(zeroOrderRequest, orderZeroLoadModel, orderZeroLoadModelTemp);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值