02利用模板模式优化抽奖流程

1、为什么需要使用模板模式

从上一节中,执行抽奖的流程如下:

1)从数据库获取策略配置信息
2)校验和初始化数据(根据策略信息维护一个概率列表)
3) 获取那些被排除掉的抽奖列表,这些奖品可能是已经奖品库存为空,或者因为风控策略不能给这个用户薅羊毛的奖品
4)根据配置的策略方式执行抽奖算法
5)包装中奖结果

如果不使用模板模式,在一个类中的一个方法按上面的执行流程按顺序实现也可以,但是随着业务流程的变化,会导致这个类越来越臃肿。

实际上这些流程里面,可能大部分都是固定的实现,只有小部分业务流程需要扩展的,模板模式就可以把抽奖流程标准化,对于某些扩展的流程方法定义为抽象方法,由其继承者实现。

这样每次需要使用抽奖流程时,都可以直接继承该模板,实现扩展的抽象方法即可,而不需要每次都要按顺序实现全部的流程方法。

2、模板模式分析

标准化流程
1)从数据库获取策略配置信息
2)校验和初始化数据(根据策略信息维护一个概率列表)
5)包装中奖结果

需要扩展的流程
3) 获取那些被排除掉的抽奖列表,包括:奖品库存为空、风控策略、临时调整等,这类数据是含有业务逻辑的,所以需要由具体的实现方决定
4)根据配置的策略方式执行抽奖算法,例如执行抽奖后还要增加一些个性化的逻辑,比如扣除库存等等

3、模板模式实现

优化前

优化后
AbstractDrawBase:抽象出抽奖流程,实现了IDrawExec类的doDrawExec方法,该方法包括了抽奖的所有流程,其中,queryExcludeAwardIds和drawAlgorithm方法为抽象方法,由继承者实现。
DrawStrategySupport:封装抽奖流程用到的查询策略等方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值