# 第06节:模板模式处理抽奖流程
作者:小傅哥
博客:https://bugstack.cn (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!
- 分支:210828_xfg_subtractionStock (opens new window)
- 描述:基于模板设计模式,规范化抽奖执行流程。包括:提取抽象类、编排模板流程、定义抽象方法、执行抽奖策略、扣减中奖库存、包装返回结果等,并基于P3C标准完善本次开发涉及到的代码规范化处理。
# 零、优秀作业
- 第六章模板模式跟着一遍印象加深 @YAMIN (opens new window)
- 【数据库乐观锁】的方式来控制奖品库存,防止超卖 @拿笔小星 (opens new window)
- 6-8节结构图梳理 @阿羲⭐️ (opens new window)
- 模板模式处理抽奖流程 @一点江南 (opens new window)
- 模板模式处理抽奖流程 @BerserkD (opens new window)
- 抽奖系统第6节模板模式处理抽奖流程 @巍 (opens new window)
- 模板模式处理抽奖流程 @Geroge Liu (opens new window)
- 构建活动领取模块,复习路由组件 @Chin (opens new window)
- 学习策略库表的设计、抽奖算法的实现与抽奖流程的设定 @HL (opens new window)
- 抽奖过程方法实现 @Jachin (opens new window)
- 通过两天的学习成功将第五、第六章节跑通并完成了测试,感受最深的是对策略模式和模板模式的进一步了解 @星期一 (opens new window)
- 记录一下 第5部分第06节:部署环境 nacos 踩的坑 @灵幻新隆 (opens new window)
- 增加了一个模板方法模板化处理抽奖流程,使得整个抽奖过程结构清晰 @twinkler (opens new window)
- 学习进度06节模板模式处理抽奖流程,好的代码就是好的文档的一部分 @learningJ (opens new window)
- 这里一个map看起来代码也简洁清晰也没有用到if else,所以这里就是这章节的最大收获 @learningJ (opens new window)
- 模版模式处理抽奖流程,分享自己的学习方法 @theSunlin (opens new window)
- 第2章~第6章,学习汇总 @CCAT (opens new window)
# 一、开发日志
下载安装 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)
# 二、模板模式应用
本章节最大的目标在于把抽奖流程标准化,需要考虑的一条思路线包括:
- 根据入参策略ID获取抽奖策略配置
- 校验和处理抽奖策略的数据初始化到内存
- 获取那些被排除掉的抽奖列表,这些奖品可能是已经奖品库存为空,或者因为风控策略不能给这个用户薅羊毛的奖品
- 执行抽奖算法
- 包装中奖结果
以上这些步骤就是需要在抽奖执行类的方法中需要处理的内容,如果是在一个类的一个方法中,顺序开发这些内容也是可以实现的。但这样的代码实现过程是不易于维护的,也不太方便在各个流程节点扩展其他功能,也会使一个类的代码越来越庞大,因此对于这种可以制定标准流程的功能逻辑,通常使用模板方法模式是非常合适的。接下来我们就来通过这样的设计模式来开发实现下代码逻辑。