【设计模式实战】SpringBoot模板+策略设计模式实现抽奖流程
一、需求分析
1.
抽奖余额有两种,1种【货币1】,1种【货币2】,对应扣除两种余额
2.不变的部分余额和扣除余额,变化的部分是余额类型与扣除方式,所以可以使用策略模式
二、设计模式思想
1. 定义获得余额和扣除余额抽象方法
2. 策略方法分为【货币1】策略和【货币2】策略
3. 调用放Context根据传入策略执行查询和扣除方法
4. 可扩展,新增【货币3】抽奖,则只需要实现LotteryContext接口
二、代码实现
- LotteryStrategy
/*** 抽奖策略模式* 需求分析:抽奖余额有两种,1种金币,1种奖券;不变的部分余额和扣除余额,变化的部分是余额类型与扣除方式,所以可以使用策略模式* 1. 定义获得余额和扣除余额抽象方法* 2. 策略方法分为金币策略和奖券策略* 3. 调用放Context根据传入策略执行查询和扣除方法* 4. 可扩展,新增钻石抽奖,则只需要实现LotteryContext接口* @author Marion* @date 2021/7/15 09:59*/ public interface LotteryStrategy {/*** 获得抽奖货币*/long amount(long uid);/*** 扣除抽奖货币*/boolean draw(long uid, long amoun);}
- CoinLotteryStrategy
/*** 金币抽奖模式* @author Marion* @date 2021/7/15 10:07*/ @Component public class CoinLotteryStrategy implements LotteryStrategy {/*** 获得抽奖货币*/@Overridepublic long amount(long uid) {return 0;}/*** 扣除抽奖货币* @param uid* @param amount*/@Overridepublic boolean draw(long uid, long amount) {return true;} }
- CouponLotteryStrategy
/*** 奖券抽奖模式* @author Marion* @date 2021/7/15 10:07,*/ @Component public class CouponLotteryStrategy implements LotteryStrategy {/*** 获得抽奖货币*/@Overridepublic long amount(long uid) {return 0;}/*** 扣除抽奖货币* @param uid* @param amount*/@Overridepublic AssetTransaction draw(long uid, long amount) {return true}}
- LotteryContext
/*** 抽奖策略模式* @author Marion* @date 2021/7/15 10:04*/ public class LotteryContext {private LotteryStrategy lotteryStrategy;public LotteryContext(LotteryStrategy lotteryStrategy) {this.lotteryStrategy = lotteryStrategy;}public long getAmount(long uid) {return this.lotteryStrategy.amount(uid);}public boolean draw(long uid, long amount) {return this.lotteryStrategy.draw(uid, amount);}}
三、运行结果
【设计模式实战】SpringBoot模板+策略设计模式实现抽奖流程相关推荐
- java策略设计模式_Java中的策略设计模式
java策略设计模式 策略设计模式是一种行为模式,其中我们有多种算法/策略来完成一项任务,所使用的算法/策略留给客户选择. 各种算法选项封装在单独的类中. 在本教程中,我们将学习在Java中实现策略设 ...
- java设计模式实战-(反射+策略模式)
学完23种设计模式,相信很多同学都疑问,除了单例模式.工厂模式其他模式还有运用的场景吗? 现在这里就举一个例子. 首先策略模式需要先有了解,我们常用策略模式解决实际开发中的if else特别多的场景. ...
- 策略模式示例代码_策略设计模式示例
策略模式示例代码 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的 ...
- 【设计模式】通俗易懂的Java设计模式篇!
文章目录 1.设计模式的六大原则 1.1.软件设计开发原则 1.2.设计模式分类 2.创建型设计模式-单例设计模式 2.1.单例模式简介 2.2.懒汉方式实现 2.3.饿汉模式实现 2.4.JDK源码 ...
- 创建型设计模式:模板设计模式/观察者设计模式/策略设计模式
目录 设计模式的设计原则 模板设计模式 观察者模式 策略设计模式 设计模式的设计原则 依赖倒置:高层模块不应该依赖低层模块,两者都应该依赖抽象: 抽象不应该依赖具体实现,具体实现应该依赖于抽象: (记 ...
- springboot中使用模板⽅法设计模式-设计模块(六)
模板⽅法设计模式 抽象模板(Abstract Template): 定义⼀个模板⽅法,这个模板⽅法⼀般是⼀个具体⽅法,给出⼀个顶级算法⻣架, ⽽逻辑⻣架的组成步骤在相应的抽象操作中,推迟到⼦类实现 模 ...
- 23种设计模式实战!超级全,超级好懂!
<高并发系统实战派>-- 你值得拥有 设计模式实战全集: 1,设计模式实战-工厂模式,别具匠心 2,设计模式实战-抽象工厂模式,分而治之 3,设计模式实战-单例模式,我就是天下无双 4,设 ...
- 设计模式 - 行为型 - 模板模式学习
现象: 设计模式 - 行为型 - 模板模式学习 介绍: 模板模式的设计思路,在抽象类中定义抽象方法的执行顺序, 并将抽象方法设定为只有子类实现,但不提供独立访问的方法 只能通过已经被安排好的定义方法去 ...
- 23 种设计模式实战 pdf(很全)
今天分享一份学习资料:23 种设计模式实战教程.pdf,助你快速上手设计模式,写出各种高端代码,文末附下载地址. 设计模式一般分为三大类: 实战教程: 教程共 96 页PDF,太全了!纯粉丝福利,非广 ...
最新文章
- jqgrid如何渲染表格数据_jqgrid,jquery_jqGrid pivot 增加分项小计,jqgrid,jquery,jquery插件,javascript,表格 - phpStudy...
- Kong APIGW — OpenResty
- 【转】关于TP3.2 验证码不显示的问题
- AVG Anti-Spyware 7.5 .0.50(原EWIDO)汉化 破解 注册 序列号
- python输入一个\输出2个\问题
- NC14250 MMSet2
- php网站分区,PHP - Manual: 分区和分片 (官方文档)
- php背景图添加字,怎样给视频后面加背景图 视频加背景图片并添加一行广告文字...
- javascript OOP(下)(九)
- KDD CUP 2018:中国团队包揽前三名,TOP1方案出炉
- 一加9硬件规格全曝光:120Hz流体屏+双重快充
- 作业帮:字符串反转(头部插入)
- 计算机信息机房,计算机信息中心机房建设标准
- Struts2学习(三)———— 输入校验和拦截器
- 线程上下文类加载器(Thread Context ClassLoader)
- cognos报表制作学习(一)cognos如何新建普通的reportstudio报表
- 基于asp.net719圆通快递物流管理系统
- Excel 电子表格文件格式剖析
- linux文件l是什么意思,linux 中 我看到lrwxrwxrwx 那个l是什么意思?
- 61家公司入选“2021年大中华区最佳职场”榜单;针对“奥密克戎”!云顶新耀与加拿大生物技术公司研发新型疫苗 | 美通社头条...
热门文章
- 概率论与数理统计中的独立(独立 独立同分布 不相关)
- python微信好友助力_Python大神完成王者荣耀助手助力菜鸟,网友评论:不用担心被喷了...
- ENVI软件学习笔记(1)
- 医学图像配准论文学习——用于医学图像逆一致微分同胚配准的对称金字塔网络(2023
- office word 自定义大纲目录,根据大纲序号来定义子序号
- Windows Mobile系统程序与控制面板命令参数
- 【Week8作业 C】班长竞选【SCC缩点】
- 迅雷创始人程浩写了篇5万+的文章,告诫你创业AI前,必须注意的6大核心问题
- JAVA(android)提取WIFI客流探针MAC地址源码
- 强大的 10款 Mac 思维导图和流程图软件推荐