Springboot 使用设计模式- 策略模式,字节跳动四面技术面

三种不同的下单流程都属于预下单功能的一部分,但是结合业务后,逻辑算法都是基本独立的。

按照往常的写法,可能会出现如下的代码写法:

Springboot 使用设计模式- 策略模式,字节跳动四面技术面

或者有的为了不想麻烦,直接就建了三个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(留意看里面的注释):

/**

上一篇:EBS中利用Socket与外系统通信


下一篇:Oracle row_number() over( order by )的经典案例