重学Java设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」小傅哥

不同方向但同样努力的人,都有自身的价值和亮点,也都是可以互相学习的。不要太过于用自己手里的矛去攻击别人的盾,哪怕一时争辩过了也多半可能是你被安放的角色不同。取别人之强补自己之弱,矛与盾的结合可能就是坦克。

能把复杂的知识讲的简单很重要

在学习的过程中我们看过很多资料、视频、文档等,因为现在资料视频都较多所以往往一个知识点会有多种多样的视频形式讲解。除了推广营销以外,确实有很多人的视频讲解非常优秀,例如李永乐老师的短视频课,可以在一个黑板上把那么复杂的知识,讲解的那么容易理解,那么透彻。而我们学习编程的人也是,不只是要学会把知识点讲明白,也要写明白。

提升自己的眼界交往更多同好

策略模式也有点像三国演义中诸葛亮给刘关张的锦囊;

在本案例中我们模拟在购买商品时候使用的各种类型优惠券(满减、直减、折扣、n元购)

这个场景几乎也是大家的一个日常购物省钱渠道,购买商品的时候都希望找一些优惠券,让购买的商品更加实惠。而且到了大促的时候就会有更多的优惠券需要计算那些商品一起购买更加优惠!!!

这样的场景有时候用户用起来还是蛮爽的,但是最初这样功能的设定以及产品的不断迭代,对于程序员开发还是不太容易的。因为这里包括了很多的规则和优惠逻辑,所以我们模拟其中的一个计算优惠的方式,使用策略模式来实现。

这里我们先使用最粗暴的方式来实现功能

对于优惠券的设计最初可能非常简单,就是一个金额的抵扣,也没有现在这么多种类型。所以如果没有这样场景的经验话,往往设计上也是非常简单的。但随着产品功能的不断迭代,如果程序最初设计的不具备很好的扩展性,那么往后就会越来越混乱。

与上面面向流程式的开发这里会使用设计模式,优惠代码结构,增强整体的扩展性。

itstack-demo-design-20-02└──src└──main└──java└──org.itstack.demo.design├──event│└──MJCouponDiscount.java│└──NYGCouponDiscount.java│└──ZJCouponDiscount.java│└──ZKCouponDiscount.java├──Context.java└──ICouponDiscount.java策略模式模型结构

publicinterfaceICouponDiscount{/***优惠券金额计算*@paramcouponInfo券折扣信息;直减、满减、折扣、N元购*@paramskuPricesku金额*@return优惠后金额*/BigDecimaldiscountAmount(TcouponInfo,BigDecimalskuPrice);}2.2优惠券接口实现满减

publicclassMJCouponDiscountimplementsICouponDiscount>{/***满减计算*1.判断满足x元后-n元,否则不减*2.最低支付金额1元*/publicBigDecimaldiscountAmount(MapcouponInfo,BigDecimalskuPrice){Stringx=couponInfo.get("x");Stringo=couponInfo.get("n");//小于商品金额条件的,直接返回商品原价if(skuPrice.compareTo(newBigDecimal(x))<0)returnskuPrice;//减去优惠金额判断BigDecimaldiscountAmount=skuPrice.subtract(newBigDecimal(o));if(discountAmount.compareTo(BigDecimal.ZERO)<1)returnBigDecimal.ONE;returndiscountAmount;}}直减

publicclassZJCouponDiscountimplementsICouponDiscount{/***直减计算*1.使用商品价格减去优惠价格*2.最低支付金额1元*/publicBigDecimaldiscountAmount(DoublecouponInfo,BigDecimalskuPrice){BigDecimaldiscountAmount=skuPrice.subtract(newBigDecimal(couponInfo));if(discountAmount.compareTo(BigDecimal.ZERO)<1)returnBigDecimal.ONE;returndiscountAmount;}}折扣

publicclassZKCouponDiscountimplementsICouponDiscount{/***折扣计算*1.使用商品价格乘以折扣比例,为最后支付金额*2.保留两位小数*3.最低支付金额1元*/publicBigDecimaldiscountAmount(DoublecouponInfo,BigDecimalskuPrice){BigDecimaldiscountAmount=skuPrice.multiply(newBigDecimal(couponInfo)).setScale(2,BigDecimal.ROUND_HALF_UP);if(discountAmount.compareTo(BigDecimal.ZERO)<1)returnBigDecimal.ONE;returndiscountAmount;}}N元购

publicclassNYGCouponDiscountimplementsICouponDiscount{/***n元购购买*1.无论原价多少钱都固定金额购买*/publicBigDecimaldiscountAmount(DoublecouponInfo,BigDecimalskuPrice){returnnewBigDecimal(couponInfo);}}2.3策略控制类publicclassContext{privateICouponDiscountcouponDiscount;publicContext(ICouponDiscountcouponDiscount){this.couponDiscount=couponDiscount;}publicBigDecimaldiscountAmount(TcouponInfo,BigDecimalskuPrice){returncouponDiscount.discountAmount(couponInfo,skuPrice);}}3.测试验证3.1编写测试类(直减优惠)@Testpublicvoidtest_zj(){//直减;100-10,商品100元Contextcontext=newContext(newZJCouponDiscount());BigDecimaldiscountAmount=context.discountAmount(10D,newBigDecimal(100));logger.info("测试结果:直减优惠后金额{}",discountAmount);}测试结果

15:43:22.035[main]INFOorg.itstack.demo.design.test.ApiTest-测试结果:直减优惠后金额90Processfinishedwithexitcode03.2编写测试类(满减优惠)@Testpublicvoidtest_mj(){//满100减10,商品100元Context>context=newContext>(newMJCouponDiscount());MapmapReq=newHashMap();mapReq.put("x","100");mapReq.put("n","10");BigDecimaldiscountAmount=context.discountAmount(mapReq,newBigDecimal(100));logger.info("测试结果:满减优惠后金额{}",discountAmount);}测试结果

15:43:42.695[main]INFOorg.itstack.demo.design.test.ApiTest-测试结果:满减优惠后金额90Processfinishedwithexitcode03.3编写测试类(折扣优惠)@Testpublicvoidtest_zk(){//折扣9折,商品100元Contextcontext=newContext(newZKCouponDiscount());BigDecimaldiscountAmount=context.discountAmount(0.9D,newBigDecimal(100));logger.info("测试结果:折扣9折后金额{}",discountAmount);}测试结果

15:44:05.602[main]INFOorg.itstack.demo.design.test.ApiTest-测试结果:折扣9折后金额90.00Processfinishedwithexitcode03.4编写测试类(n元购优惠)@Testpublicvoidtest_nyg(){//n元购;100-10,商品100元Contextcontext=newContext(newNYGCouponDiscount());BigDecimaldiscountAmount=context.discountAmount(90D,newBigDecimal(100));logger.info("测试结果:n元购优惠后金额{}",discountAmount);

THE END
1.你需要了解的20个营销策略你需要了解的20个营销策略 20个营销策略 作为一名商业人士,在市场竞争激烈的环境中,如何将自己的产品或服务推销出去至关重要。而营销策略则是一种有力的推销武器。本文将介绍20种常见的营销策略,相信这些策略能够帮助您在市场中占据一席之地。 1. 价格战 对于价格敏感的消费者,价格压低是最有效的策略之一。参与价格https://wenku.baidu.com/view/5800d018a75177232f60ddccda38376baf1fe0cc.html
2.15种实用营销策略(附目的+要点+因素)15种实用营销策略(附目的+要点+因素) 营销策略是企业以顾客需要为出发点,根据经验获得顾客需求量以及购买力的信息、商业界的期望值,有计划地组织各项经营活动。下面为大家带来15种实用营销策略,快来看看吧。 策略一:观念营销 首先,营销必须从老板抓起,从观念抓起!老板必须认识到:营销是第一生产力!营销比生产更重要https://www.jy135.com/zhichang/184696.html
3.90种营销策略方法营销方法论今天分享的是:90种营销策略方法【营销方法论】 报告共计:94页 《90种营销策略方法【营销方法论】》介绍了90种营销策略方法,包括金字塔原理、3W黄金圈法则、5W2H分析、PDCA循环等。 金字塔原理强调表达的逻辑,先说结论后说论据;3W黄金圈法则关注做事的目的、方法和执行;5W2H分析用于产品上市、传播推广等场景;PDCA循环是https://m.sohu.com/a/795073756_121694616
4.产品有哪些营销方式(12种营销模式,你的产品卖不出去?没有办法?那?12种营销模式,你的产品卖不出去?没有办法?那是你没找对模式 1.体验模式 客户对新的产品两个态度,怀疑和渴望。 免费体验,有了效果再进行付费;单位时间内进行体验而后进行长期的使用习惯。 2.资源模式 进行资源转换(前面的文章内提过这个方法),客户免费获得我们的产品。 https://www.niaogebiji.com/article-625123-1.html
5.销售必学:提高成交率的20种营销技巧与10大制胜策略第四节渠道冲突策略矩阵 第五节渠道策略地图 第六节 以策略为基础的营销指南 第七节服务管理构成要素 第八节客户关系管理企划模型 第九节消费者行为 第十节 营销流程调整 第十一节最佳实践 <↓↓点击标题查看文档↓↓> 客户服务与客户关系管理.ppt 什么是营销的眼光? https://news.mbalib.com/story/254459
6.2024年策略人必备的118个营销模型(13.0最新版)适用场景:营销策略分析 理论来源:1975年 策略管理之父安索夫博士 安索夫矩阵又被称为产品市场扩张方格,是一种常用的营销分析工具。以产品和市场作为横纵坐标,组成2X2矩阵,分成四种产品/市场组合,以及相对应的营销策略。 市场渗透:现产品服务现市场,通过市场渗透增加市场份额; https://www.360doc.cn/article/867712_1118797952.html
7.市场营销调研报告15篇第一,有利于为企业的决策和调整策略提供客观依据。 第二,有利于企业发现市场机会,开拓新市场。 第三,有利于准确的市场定位,更好的满足顾客的需要,增强竞争力。 第四,有利于企业建立和完善市场营销信息系统,提高企业的经营 第五,是企业宣传品牌的一种方式。 https://www.fwsir.com/Article/html/Article_20230301190715_2470652.html
8.营销管理(营销管理)书评第一篇 理解营销管理第1章 定义营销新现实Marketing(市场营销)最简洁的定义是:有利可图地满足需求。营销管理是选择目标市场并通过创造、传递和传播卓越顾客价值,来获取、维持和增加顾客的艺术和科学。销售这是市场营销的冰山一角。德鲁克说,市场营销的目的就是让销售变得多余。营销人员需要营销10个主要类型的实体:产品https://book.douban.com/review/12450570/
9.品牌营销的二十个基本步骤根据品牌营销目标,结合行业和企业实际情况,设计年度品牌营销策略,确定品牌营销策略,确定人员结构和人员成本预算,并确定年度品牌营销目标分解方案。有了完善的年度品牌营销策略,老板就可以对营销工作有一定的预期和心理准备。 3、 建立市场部的组织架构和岗位人员 https://tech.taobao.org/news/2021-2-7-34.html
10.商场营销方案20篇商场营销方案4 一. 活动主题: ***第二届“感恩节”隆重开幕,公司推出满100元送20元,新郎店推出新郎套西服买一送二,以旧换新、满100送20等活动;感恩回报超值优惠惊爆低价限量抢购,每天推出几十款惊爆低价商品抢购!好机会岂能错过,火速行动吧! (一、)满100送20 https://www.wenshubang.com/fangan/3359567.html
11.车位销售20种营销方案.docx车位销售20种营销方案篇1:车位营销方案车位营销方案一、我方车位概况: 1、×××小区地下停车库车位:位于××市上海路××都市花园北侧,现有待销车位65个; 2、×××A区、B区地下停车库车位:位于××区××街东侧,××湖畔和××雅居小区北侧,现有待销车位40个、45个。 3、原我方共有车位160个,采用委托房屋https://m.book118.com/html/2022/0731/5101220040004314.shtm
12.自考市场营销策划真题全国2008年7月自考试卷8.企业以不同的价格策略在不同地区营销同一种产品,这种差价策略是( ) A.时间差价策略 B.地理差价策略 C.质量差价策略 D.用途差价策略 9.企业在建立客户资料卡或客户管理卡后,不能将其束之高阁,而应当以适当的方式及时、全面的提供给推销员以及其它相关人员,使其能进一步加以利用,从而提高客户管理的效率。这一https://www.hbzkw.com/exam/20091129084352.html
13.智慧树知到章节测试答案汇总智慧树知到创新创业基础心理降答案汇总9、营销者顺应互联网营销思维的观念转变,需要关注:(ABD) A、个性化营销 B、细分市场 C、顾客数据库 D、顾客份额 E、渠道开拓 10、4C营销组合策略的四个基本要素是:(BCEF) A、产品 B、消费者 C、成本 D、价格 E、便利 F、沟通 第三章测试 1、商业模式创新是一种:(C) https://www.qqtn.com/article/article_319268_1.html
14.市场营销经典方案有哪些(精选12篇)七、营销策略:重在抓住推销对象的心理。 (1)首先要给人一种亲切的感觉,自我介绍很重要,带上学生证是必须的,作为学长或学姐的我们要在新生们眼中是很值得信赖的。可以以学长或学姐的身份向他们介绍学校情况,像交朋友一般。交谈时要面带微笑,拉近彼此间的距离,言语中透露大学英语学习的重要性:作为我校的大一新生,http://www.xiefangan.com/cehuafangan/32224.html
15.畅销商品清单:2025年热销的20种在线产品(附营销技巧)20个销售网站和交易平台助你在线销售商品 海外版抖音赚钱之道 8 大变现技巧教你如何通过 TikTok 盈利 外贸转型趋势解读:跨境电商平台成行业布局新趋势 2021年最适合销售的代发货产品(附营销技巧) 日本乐天向中国卖家敞开怀抱,助力商家实现品牌出海 13个Shopify一件代发应用,助你找到可销售的产品(无需亲自发货) https://zh.shopify.com/blog/trending-products
16.营销活动方案(15篇)专卖店与消费者接触最为亲密,公司与消费者之间是有赖营销沟通策略的展现,每年推出不同主题的营销策略,可以建立消费者对品牌形象的认知更为肯定,因此年度服装促销计划结合营销策略,将可以使得品牌形象更加强烈,消费者对品牌好感度增加,同时结合营销策略也能使得资源运用更为集中,具有延续效益。例如某休闲服饰店年度营销沟通https://www.ruiwen.com/fangan/5365025.html
17.营销活动方案精选20篇营销活动方案精选20篇 为有力保证事情或工作开展的水平质量,常常需要预先制定方案,方案是有很强可操作性的书面计划。那么制定方案需要注意哪些问题呢?以下是小编为大家整理的营销活动方案,供大家参考借鉴,希望可以帮助到有需要的朋友。 营销活动方案1 一、促销活动时间: https://www.unjs.com/huodongfangan/202208/5408971.html
18.经济学:国际市场营销微信做题(每日一练)考试题库20、问答题 制定国际市场营销策略应把握哪些要点? 点击查看答案 21、填空题 许多关于()的理论可用以解释国际市场营销活动的产生与发展 点击查看答案 22、判断题 在国际市场上,广告限制因素包含了法律限制、媒体限制和受众限制。() 点击查看答案 23、问答题 产品延伸策略及其优点是什么? 点击查看答案 24、多项http://www.91exam.org/exam/87-3576/3576067.html
19.营销人该了解的营销管理理论网络营销咨询网络营销外包公司在营销的世界里,理论和模型是指导我们走向成功的灯塔。但问题是,我们如何真正将这些理论转化为实际的营销策略,以实现业务的飞跃和增长?让我们以一个挑战性的问题开启这篇文章的探索之旅: 如何运用古老的营销智慧,在现代商业环境中创造竞争优势? 我们知道,营销是一种支持销售更多产品或服务的市场行为。了解更多有关消费https://www.marketingbetter.com/marketing-management-theories/
20.营销策划方案(经典15篇)目前国内汽车企业对网络营销模式还处于实践摸索和向国外同行企业学习的阶段,还没有构成一整套适合我国国情的汽车网络营销指导策略。一些汽车企业只习惯于沿用过去传统实体市场的营销策略,不熟悉与网络营销相适应的营销策略,不注意在经营过程中提高企业经营水平、培育企业顾客资源、革新企业技术、扩大企业竞争优势等等,同国外汽https://www.gdyjs.com/shiyongwen/cehuashu/565077.html