工厂模式+策略模式

UML:

 class:

public interface IDeliveryService {

    /**
     * 创建第三方出货单
     * @param obj 入参
     */
    Object createThirdOrder(Object obj);
}
@Service
@RequiredArgsConstructor
public class DeliveryServiceImpl implements IDeliveryService {

    private final DeliveryStrategyFactory deliveryStrategyFactory;

    @Override
    public Object createThirdOrder(Object obj){
        // 根据type确定出库策略
        IDeliveryStrategy deliveryStrategy = deliveryStrategyFactory.getDeliveryStrategy(DeliveryPlatformEnum.MO_FANG);
        // 创建
        return deliveryStrategy.create((MoFangCreateOrderDTO )deliveryOrderDTO);
    }
}
@Component
public class DeliveryStrategyFactory implements ApplicationContextAware {

    private Map<DeliveryPlatformEnum,IDeliveryStrategy> deliveryStrategyMap = new HashMap<>();

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        Map<String, IDeliveryStrategy> beansOfType = applicationContext.getBeansOfType(IDeliveryStrategy.class);
        beansOfType.values().forEach(e-> deliveryStrategyMap.put(e.getDeliveryPlatformEnum(),e));
    }

    public IDeliveryStrategy getDeliveryStrategy(DeliveryPlatformEnum deliveryPlatformEnum){
        return deliveryStrategyMap.get(deliveryPlatformEnum);
    }
}
@Getter
public enum DeliveryPlatformEnum {
    /**
     * 魔方平台
     */
    MO_FANG(1,"魔方");

    private final Integer code;

    private final String description;

    DeliveryPlatformEnum(Integer code,String description) {
        this.code = code;
        this.description = description;
    }
}
public interface IDeliveryStrategy {
    /**
     * 策略所属平台枚举
     * @return 。
     */
    DeliveryPlatformEnum getDeliveryPlatformEnum();
    /**
     * 创建出货单
     * @param
     * @return
     */
    Object create(Object obj);
}
@Service
@RequiredArgsConstructor
public class MoFangDeliveryStrategy implements IDeliveryStrategy {

    private final MoFangClient moFangClient;

    @Override
    public DeliveryPlatformEnum getDeliveryPlatformEnum() {
        return DeliveryPlatformEnum.MO_FANG;
    }

    @Override
    public Object create(Object obj){
        return JsonUtils.toObject(moFangClient.createOrder((MoFangCreateOrderDTO) obj), MoFangCreateOrderResponse.class);
    }


}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值