# 第06节:模板模式处理抽奖流程

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!

  • 分支:210828_xfg_subtractionStock (opens new window)
  • 描述:基于模板设计模式,规范化抽奖执行流程。包括:提取抽象类、编排模板流程、定义抽象方法、执行抽奖策略、扣减中奖库存、包装返回结果等,并基于P3C标准完善本次开发涉及到的代码规范化处理。

# 零、优秀作业

# 一、开发日志

  • 下载安装 IDEA P3C 插件 Alibaba Java Coding Guidelines,统一标准化编码方式。在本次分支涉及到的代码开发中,已调整代码中类、属性、方法对应的注释信息

  • 定义 Preferences | Editor | File and Code Templates -> File Header

    /**
     * @description: 
     * @author:小傅哥,微信:fustack
     * @date: ${DATE}
     * @Copyright: 公众号:bugstack虫洞栈 | 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获!
     */
    
    1
    2
    3
    4
    5
    6
  • 调整表 lottery.strategy_detail 添加 awardSurplusCount 字段,用于记录扣减奖品库存使用数量。

    alter table strategy_detail add awardSurplusCount int default 0 null comment '奖品剩余库存';
    
    1
  • 【重点】使用模板方法设计模式优化类 DrawExecImpl 抽奖过程方法实现,主要以抽象类 AbstractDrawBase 编排定义流程,定义抽象方法由类 DrawExecImpl 做具体实现的方式进行处理。关于模板模式可以参考下:重学 Java 设计模式:实战模版模式「模拟爬虫各类电商商品,生成营销推广海报场景」 (opens new window)

# 二、模板模式应用

本章节最大的目标在于把抽奖流程标准化,需要考虑的一条思路线包括:

  1. 根据入参策略ID获取抽奖策略配置
  2. 校验和处理抽奖策略的数据初始化到内存
  3. 获取那些被排除掉的抽奖列表,这些奖品可能是已经奖品库存为空,或者因为风控策略不能给这个用户薅羊毛的奖品
  4. 执行抽奖算法
  5. 包装中奖结果

以上这些步骤就是需要在抽奖执行类的方法中需要处理的内容,如果是在一个类的一个方法中,顺序开发这些内容也是可以实现的。但这样的代码实现过程是不易于维护的,也不太方便在各个流程节点扩展其他功能,也会使一个类的代码越来越庞大,因此对于这种可以制定标准流程的功能逻辑,通常使用模板方法模式是非常合适的。接下来我们就来通过这样的设计模式来开发实现下代码逻辑。