目录

优惠券系统

优惠券A:

优惠券B:

设计思想:

设计:

代码:

会员卡系统

需求

感受

结果:


优惠券系统

优惠券A:

满多少金额使用 (满m减X元)

优惠券B:

无门槛使用 (减X元)

设计思想:

合并AB,简化逻辑:未满金额0元   满金额的X元。 (B就是X=0)

设计:

属性:面值X

方法:传入金额计算当前面值

代码:

/*** 优惠券*/
public class Coupon {private String couponId;private double needPay;private double money;private double value;/*** 无门槛优惠券** @param value* @param money*/public Coupon(String couponId, double value, double money) {this(couponId, value, 0, money);}/*** 满多少减多少优惠券** @param value 面值* @param money 需要支付多少金额生效* @param money 传入的金融*/public Coupon(String couponId, double value, double needPay, double money) {this.couponId = couponId;this.value = value;this.needPay = needPay;this.money = money;}public double getBenefit() {return money >= needPay ? value : 0;}}

会员卡系统

需求

在优惠券已经首先的情况的下,产品又出了 会员卡系统,可以选择使用会员卡或者优惠券

会员卡系统:分三种

A会员卡:储值卡 - 多少金额有限使用储值卡

B会员卡:折扣卡 - 可以直接打折  最终优惠金额

C会员卡:储值折扣卡 - 先打折,打折之后使用卡里的钱

在优惠券的基础上,我们可以选择使用会员卡或者优惠券

感受

(当然储值卡钱会对应的减掉 这个就后端处理就好 前端我们只需要当前是面值)

完了,之前写好的推翻重来?

感觉完全不能接受啊

我们理一下思路,优惠券里面有属性面值X。

A会员卡中 储值卡其实也是一种面值

B会员卡优惠的金额也是储值卡的面值

C会员卡储值也是储值卡的面值

那么继续,优化下会员卡的计算方式:

A会员卡中,传入金额为m,储值n大于m,则面值为m,储值n小于等于m,则为面值为n;

B会员卡中,传入金额为m,折扣Z,面值为m-mz;

C会员卡中,传入金额为m,折扣Z,储值n,总价为mz;

储值n大于mz,则储值面值为mz;储值n小于等于mz,则为储值面值为n;

当然优惠部分也是该会员卡的面值 即 (m-mz)+ mz = m 和传入金额一样,即使全部抵扣  或者是储值n小于等于mz, ( m-mz)+ n

OK 我们会员卡就变成一张特殊的优惠券;这样就把会员卡和优惠券等同处理可以复用之前的逻辑,减肥了代码维护内容。

但是这样概念较为抽象,优化一下,抽离一个优惠概念

代码:

/*** 优惠模型*/
public interface Benefit {/*** 获取优惠值** @param money 优惠的价格  即优化的价值 或者说面额* @return*/double getBenefitValue(double money);}/*** 优惠券*/
public class Coupon implements Benefit {private String couponId;/*** 满多少*/private double needPay;/*** 减多少*/private double value;@Overridepublic double getBenefitValue(double money) {return money >= needPay ? value : 0;}}/*** 会员卡*/
public class VipCard implements Benefit {private String vipCardId;/*** 折扣*/private double discount;/*** 储值*/private double storeValue;/*** 卡类型*/private int vipCardType;/*** 储值卡*/private static final int TYPE_STORE_VALUE = 0;/*** 折扣卡*/private static final int TYPE_DISCOUNT = 1;/*** 储值折扣卡*/private static final int TYPE_STORE_VALUE_DISCOUNT = 2;@Overridepublic double getBenefitValue(double money) {switch (vipCardType) {case TYPE_STORE_VALUE://A会员卡中,传入金额为m,储值n大于m,则面值为m,储值n小于等于m,则为面值为n;return money >= storeValue ? storeValue : money;case TYPE_DISCOUNT://B会员卡中,传入金额为m,折扣Z,面值为m-mzreturn money - money * discount;case TYPE_STORE_VALUE_DISCOUNT:/*** 传入金额为m,折扣Z,储值n,总价为mz; * 储值n大于mz,则储值面值为mz;* 储值n小于等于mz,则为储值面值为n;* 当然优惠部分也是该会员卡的面值 即 (m-mz)+ mz = m 和传入金额一样,即使全部抵扣  或者是储值n小于等于mz, ( m-mz)+ n*/double allMoney = money * discount;//这里全部钱都被优惠掉了 储值也算优化if (storeValue > allMoney) {return money;}return money - allMoney + storeValue;default:return 0;}}}

结果:

这里的话会员卡和优惠券我们已经抽离成为同一概念,这样也可以在列表共同选择优惠了。但是目前来看对该项目是基本够用了,但是接下来是否能经得起接下来产品需求对推敲呢,未完待续...

商城优惠券会员卡系列(一)相关推荐

  1. 商城优惠券会员卡系列(二)

    文章目录 前言 对策 策略模式 总结 前言 接上文继续 ,这时候产品又来了一个新需求(PS:这是一个假需求,自己遐想的). 我们来了新出一个需求:需要优惠券里面添加一个功能,优惠券新出折扣优惠券,可以 ...

  2. 微信小程序购物商城系统开发系列-工具篇

    微信小程序购物商城系统开发系列-工具篇 微信小程序开放公测以来,一夜之间在各种技术社区中就火起来啦.对于它 估计大家都不陌生了,对于它未来的价值就不再赘述,简单一句话:可以把小程序简单理解为一个新的操 ...

  3. vivo全球商城优惠券系统架构设计与实践

    业务背景 优惠券是电商常见的营销手段,具有灵活的特点,既可以作为促销活动的载体,也是重要的引流入口.优惠券系统是vivo商城营销模块中一个重要组成部分,早在15年vivo商城还是单体应用时,优惠券就是 ...

  4. 2022最新淘客三合一cms商城优惠券系统搭建教程

    直接在大淘客官网注册账号,然后点击下图的位置,下载index.php部署到自己的云服务器或虚拟主机即可. 注意:此次官网大淘客已经更新了整合了淘客三合一商城系统,无须把自己的拼多多商城和京推推商城导入 ...

  5. 商城优惠券模块设计与实现

    文章目录 前言 优惠券是什么? 优惠券的发行种类有哪些? 优惠券券类型 对优惠券发放进行客群限定 对优惠券发放进行商品限定 优惠券分享方式 兑换码兑换优惠券的场景 优惠券模块包含了什么? 用户侧 平台 ...

  6. Scrapy 爬取京东商城华为全系列手机评论

    向AI转型的程序员都关注了这个号

  7. Scrapy爬取京东商城华为全系列手机评论

    本文转自:https://mp.weixin.qq.com/s?__biz=MzA4MTk3ODI2OA==&mid=2650342004&idx=1&sn=4d270ab7c ...

  8. 分享大型Java多用户商城系统开发历程

    最近公司要搞商城,让我多方咨询,最后看了很多,要不就是代码.表字段注释不全,要不就是bug多,要么就是文档缺少,最后决定自己开发一套商城. 下面是开发的一些心得体会,权且记录下来,给自己做个记录把. ...

  9. 如何搭建线上商城和线下门店的联合运营解决方案

    编辑导语:如今随着互联网的发展以及人们生活水平的提高,再加上上半年疫情的冲击,很多人都开始使用线上商城的方式进行购买生鲜等,实体商业由此受到打击:本文作者分享了关于搭建线上线下的联合运营,我们一起来看 ...

最新文章

  1. ThreadLocal的空指针异常问题
  2. oracle logminer java_Oracle logminer
  3. su: user tomcat does not exist
  4. C语言之运算符优先级(四十二)
  5. ConceptDraw Office for mac(跨平台图表办公程序)
  6. SPI机制入门、SPI机制原理
  7. java+opencv实现人脸识别
  8. 计算机考研英语复试如何准备,如何准备考研英语复试听力?
  9. Docker容器监控cAdvisor
  10. [方便WAP网站开发]在线手机WAP模拟器或软件
  11. ADAS功能中LCA、LKA、LCK...区别
  12. MT8516芯片原理图资料(6MIC_RESERVE_4MIC_ARRA)
  13. gis 大屏_大屏简介
  14. iOS 实现二维码的彩色效果
  15. WhatsApp API介绍
  16. 回望过去,感觉现在的自己十分功利
  17. Unity文件转移出现的粉红色材质的处理方法
  18. 2013 HTML5 峰会,HTML5 守望者的盛宴
  19. 用HBuilderX开发小程序的一些问题
  20. OUC_SE_Group04_Blog2

热门文章

  1. 想转行当程序员的必看!2021年Android春招面试经历,威力加强版
  2. 实战:kali攻击Android手机
  3. @Import注解与@Bean注解区别
  4. Ubuntu更改下载源
  5. NNI神经网络调参工具简单学东西笔记,关于参数传递逻辑的学习记录
  6. 手机app兼容性测试点分析(通用)
  7. 如何用手机访问电脑本地webpack打包的项目?
  8. 大数据 - 统计分析平台架构介绍
  9. Centos7 SSH安全防护---系统安全管家
  10. JavaWeb实现员工管理系统