三种不同的下单流程都属于预下单功能的一部分,但是结合业务后,逻辑算法都是基本独立的。
按照往常的写法,可能会出现如下的代码写法:
或者有的为了不想麻烦,直接就建了三个service,然后三个serviceImpl。
那么就针对上面这个场景,我们使用设计模式-策略模式,就能非常润滑地去实现。
正文
======
订单信息实体类,OrderInfo.java:
import lombok.Data;
/**
-
@Author : JCccc
-
@CreateTime : 2020/5/11
-
@Description :
**/
@Data
public class OrderInfo {
private String orderId; //订单id
private String platFormType; //(平台)订单类型
private Double amount; //金额
private String createTime; //创建时间
//…省略若干业务字段
}
预下单的策略接口,OrderStrategyService.java :
/**
-
@Author : JCccc
-
@CreateTime : 2020/5/11
-
@Description :
**/
public interface OrderStrategyService {
//预下单
String preCreateOrder(OrderInfo orderInfo);
}
接下来是三个类型订单的实现类,都实现策略接口:
国内,OrderDomestic.java:
/**
-
@Author : JCccc
-
@CreateTime : 2020/5/11
-
@Description :国内
**/
@Component(“Domestic”)
public class OrderDomestic implements OrderStrategyService {
@Override
public String preCreateOrder(OrderInfo orderInfo) {
System.out.println(“处理国内预下单的相关业务”);
return orderInfo.getPlatFormType()+"-国内预下单";
}
}
海外,OrderOverseas.java :
/**
-
@Author : JCccc
-
@CreateTime : 2020/5/11
-
@Description :海外
**/
@Comp
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
onent(“Overseas”)
public class OrderOverseas implements OrderStrategyService {
@Override
public String preCreateOrder(OrderInfo orderInfo) {
System.out.println(“处理海外预下单的相关业务”);
return orderInfo.getPlatFormType()+"-海外预下单";
}
}
特殊回扣,
/**
-
@Author : JCccc
-
@CreateTime : 2020/5/11
-
@Description :特殊订单(回扣)
**/
@Component(“Rebate”)
public class OrderRebate implements OrderStrategyService {
@Override
public String preCreateOrder(OrderInfo orderInfo) {
System.out.println(“处理国内特殊回扣预下单的相关业务”);
return orderInfo.getPlatFormType()+"-特殊回扣预下单";
}
}
可以看到上面三个实现类都实现了策略接口OrderStrategyService,而且使用了注解@Component +组件名。
那么接下来就是策略设计模式的核心, 策略接口实现类的调度使用类,OrderStrategyContext.java(留意看里面的注释):
/**