支付场景中利用策略模式工厂模式单例模式解决ifelse过多的
一、场景模拟publicvoidpayment(StringpayType){if(payType。equals(ALIPAY)){支付宝支付}elseif(payType。equals(WECAHTAPY)){微信支付}elseif(payType。equals(UNIONPAY)){银联支付}elseif(payType。equals(JDPAY)){京东支付}else{其它支付。。。。。。。。}}
在支付场景中,随着业务的不断扩展,支付方式会越来越多,这样会堆叠大量的ifelse判断逻辑,代码非常臃肿,耦合性非常高,并且这种ifelse的编写破坏了设计模式六大原则中的里氏开闭原则(对拓展开放,修改关闭),不利于后续的变动和修改。为了使代码符合优雅的设计模式和编码形式,现在提供一种新的修改思路供大家参考,主要采用策略模式、工厂模式、单例模式去重构代码。二、策略模式策略模式publicabstractclassPaymentStrategy{publicabstractStringgetName();protectedabstractdoublequeryBalance(Stringuid);publicPayResultpay(Stringuid,doubleamount){if(queryBalance(uid)amount){returnnewPayResult(500,支付失败,余额不足);}returnnewPayResult(200,支付成功,支付余额:(queryBalance(uid)amount)元);}}支付宝支付策略publicclassAliPayStrategyextendsPaymentStrategy{OverridepublicStringgetName(){return支付宝支付;}OverrideprotecteddoublequeryBalance(Stringuid){return200;}}微信支付策略publicclassWeChatPayStrategyextendsPaymentStrategy{OverridepublicStringgetName(){return微信支付;}OverrideprotecteddoublequeryBalance(Stringuid){return300;}}银联支付策略publicclassUnionPayStrategyextendsPaymentStrategy{OverridepublicStringgetName(){return银联支付;}OverrideprotecteddoublequeryBalance(Stringuid){return100;}}京东支付策略publicclassJDPayStrategyextendsPaymentStrategy{OverridepublicStringgetName(){return京东支付;}OverrideprotecteddoublequeryBalance(Stringuid){return500;}}三、支付方式枚举支付方式枚举publicenumPaymentEnum{ALIPAY(ALIPAY,newAliPayStrategy()),WECHATPAY(WECHATPAY,newWeChatPayStrategy()),UNIONPAY(UNIONPAY,newUnionPayStrategy()),DEFAULT(DEFAULT,newJDPayStrategy());privatefinalStringpayName;privatefinalPaymentStrategypaymentStrategy;PaymentEnum(StringpayName,PaymentStrategypaymentStrategy){this。payNamepayName;this。paymentStrategypaymentStrategy;}publicStringgetPayName(){returnpayName;}publicPaymentStrategygetPaymentStrategy(){returnpaymentStrategy;}}四、工厂模式单例模式支付方式工厂类publicclassPaymentFactory{privatestaticMapString,PaymentStrategyregisternewHashMap();static{for(PaymentEnump:PaymentEnum。values()){register。put(p。getPayName(),p。getPaymentStrategy());}}单例饿汉(注册表)publicstaticPaymentStrategygetInstance(StringpayType){if(register。containsKey(payType)){returnregister。get(payType);}returnPaymentEnum。DEFAULT。getPaymentStrategy();}}五、业务类publicclassPayResult{privateintcode;privateObjectdata;privateStringmsg;publicPayResult(intcode,Objectdata,Stringmsg){this。codecode;this。datadata;this。msgmsg;}publicintgetCode(){returncode;}publicvoidsetCode(intcode){this。codecode;}publicObjectgetData(){returndata;}publicvoidsetData(Objectdata){this。datadata;}publicStringgetMsg(){returnmsg;}publicvoidsetMsg(Stringmsg){this。msgmsg;}OverridepublicStringtoString(){returnPayResult{codecode,datadata,msgmsg};}订单类publicclassOrder{privateStringuid;privateStringorderId;privateDoubleamount;publicOrder(Stringuid,StringorderId,Doubleamount){this。uiduid;this。orderIdorderId;this。amountamount;}publicStringgetUid(){returnuid;}publicvoidsetUid(Stringuid){this。uiduid;}publicStringgetOrderId(){returnorderId;}publicvoidsetOrderId(StringorderId){this。orderIdorderId;}publicDoublegetAmount(){returnamount;}publicvoidsetAmount(Doubleamount){this。amountamount;}publicPayResultpay(StringpayType){PaymentStrategypaymentStrategyPaymentFactory。getInstance(payType);System。out。println(欢迎使用paymentStrategy。getName());System。out。println(本次交易金额为:amount元,开始扣款。。。);returnpaymentStrategy。pay(uid,amount);}}六、测试publicclassPayTest{publicstaticvoidmain(String〔〕args){OrderordernewOrder(6,6,50。0);PayResultmsgorder。pay(PaymentEnum。ALIPAY。getPayName());System。out。println(msg。toString());}}欢迎使用支付宝支付本次交易金额为:50。0元,开始扣款。。。PayResult{code200,data支付成功,msg支付余额:150。0}
欲速则不达教学设计《欲速则不达》教学设计师:今天,我们要讲述的是发生在两千多年前齐国的故事,当时的大王是景公,丞相是晏婴,在他们两人之间有一个小故事,大家想了解吗?(想)师:那么今天……
传导要如何造句【注音】:chuandao【意思】:()热或电从物体的一部分传到另一部分。()神经纤维把外界刺激传向大脑皮层,或把大脑皮层的活动传向外围神经。传导……
真理诞生于一百个问号之后教学反思(通用10篇)作为一位到岗不久的教师,我们需要很强的教学能力,写教学反思能总结我们的教学经验,那么什么样的教学反思才是好的呢?以下是小编帮大家整理的《真理诞生于一百个问号之后》教学反思(通用……
五年级二泉映月教学反思翻开《二泉映月》,一种复杂的情绪涌上心头,阿炳的人生坎坷,音乐内涵十分丰富,要让五年级的学生完全理解这些,有一定难度。如何恰当地引领学生披文入境,这应该是教学中的重中之重,我自……
荷花淀公开课教案教学理念:阅读教学是学生、教师、文本、作者之间的多重对话,是思想碰撞和心灵交流的动态过程。在这个过程中,学生的个体体验应该是浪漫独特而富有想象力、创造力的。因此,文学教育……
小班儿歌睡觉日期活动名称睡觉执教者活动目标1。学习和仿编儿歌。2。尝试用动作感知、表现儿歌的内容。环境创设图片、音乐重点与难点活动过程:1,倾听音乐,将幼儿带入熟悉又神秘……
美女与IT兽千里之行始于足下?No!智慧出行才是未来所向自动驾驶及智慧出行的热潮仍在蔓延,科技巨头跨界造车的消息也屡见不鲜,华为成立智能汽车解决方案BU、百度正式组建智能汽车公司、VIVO推出JoviInCar车联网品牌,小米将造车……
交流思想的益处阅读训练及答案阅读下面文章,回答第15题。一位获得全国初中数学竞赛一等奖的同学在介绍学习经验时说:重要的是,我认识到交流思想大有益处。他的话,引起了(y)会者的共鸣。中国自古便有……
当微信能打开淘宝页面,对于中国互联网意味着什么?互联网的柏林墙似乎终于要倒了。9月9日下午,工信部有关业务部门召开屏蔽网址链接问题行政指导会,要求9月17日前各平台必须按标准解除屏蔽,否则将依法采取处置措施。9月……
发布大半年跌至2199!曲面屏一亿像素,骁龙865还值得入手来到七月份之后,手机市场即将迎来新一轮的竞争,下半年旗舰会搭载骁龙888处理器,很多骁龙888机型都开始了让路之旅,那么在此之前骁龙865更是降价夸张,笔者就找到了一款只要21……
小班综合活动推推乐活动名称:《推推乐》活动目的:1、能区别红、黄、绿三种颜色,学会将三种颜色的物体进行归类。2、学习推的技能,根据信号做动作。3、体验游戏的快乐。活动准备……
雨点儿的一年级说课稿一:说教材1,教材分析《雨点儿》一文是继《阳光》后的又一篇较长的散文形式的课文,是一篇童话。课文用拟人化的手法,通过从云彩里飘落下来的大雨点儿和小雨点儿的对话,告诉……
三个小伙伴第二课时的教案范文教学目标:1、有主动识字的愿望,自主认识课文中的生字,能按笔顺规则正确美观地书写生字把拉。2、根据自己的体验,正确、流利、有声有色地朗读课文,背诵课文。3、了……
桂林山水优秀的说课稿《桂林山水》是人教版小学语文四年级下册的课文,本说课稿从教材的特点,教学目标的确定,教法学法的选择和教材过程的预设四个方面作简单的说明。下面是小编收集整理的桂林山水优秀的说课稿……
轻盈的近义词是什么轻盈,形容人或物(女子、蝴蝶等)动作、姿态轻柔优美漂亮。如:韩愈《戏题牡丹》诗:幸自同开俱隐约,何须相倚斗轻盈。【近义词】轻巧,轻快,轻捷,轻浅,轻飘【词语注……
长租公寓频频暴雷,房东房客两头受骗大家好,我是老李。如果要问有什么比被骗钱更惨的事?还真有,今天我就来说一个付了房租却还要被扫地出门的事。长租公寓频暴雷,房东租客损失惨重到大城市打工,第……
清明古诗教案活动目标1、初步理解古诗内容,想象诗中描写的景象。2、激发对古诗吟诵的兴趣,初步学习按古诗的节律吟诵。3、了解清明节人们踏春扫墓的传统习俗。4、了解节日……
vivo回应南都海外应用不准国内分发,积极落实平台责任近日,中央网信办等四部门深入推进摄像头偷窥等黑产集中治理,偷拍类App在国内应用商店大规模下架。但是,通过vivo海外应用商店,这类App仍可在国内下载使用。南都大数据研究院针……
音乐教育在素质教育中的作用素质教育是一种旨在挖掘学生自身潜能,以完善和全面提高学生基本素质为根本目的的教育。音乐教育作为一门基础学科,首先是一种基本素质教育。它通过教授音乐这门听觉艺术,来反映人们……
水乡歌优秀说课稿一、说教材(一)教材说明《水乡歌》是苏教版小学语文第三册第20课。本课是一首诗歌,歌咏了水乡的秀丽风光和幸福美好的生活,抒发了热爱大自然、热爱生活的思想感情。全诗共……
沁园春amp8226雪课文简析这首词是毛泽东诗词的代表作之一,也是中国现代诗坛的一首杰出的词作。全词借景抒怀它描写雄伟壮阔而又妖娆美好的北国雪景,纵论历史上的英雄人物,抒发了诗人对祖国壮丽山河……
五光十色的造句65句造句,动词词语,是指用词语组织句子。今亦以指初等学校语文练习内容之一。以下是五光十色的造句,希望能够帮助的到您!1、商场里陈列着五光十色的商品。2、展览的宝石五光十……
拍卖灵魂阅读训练及答案拍卖灵魂阅读训练及答案拍卖灵魂阅读附答案林子宇是个资深的书画拍卖师,同时还是位造诣很深、精通鉴赏书画的名家。在一场为期三天的拍卖会上,林子宇受邀拍卖字画。这是……
家庭游戏幼儿教案活动目标:1、幼儿自行分配游戏角色投入表演,2、把握游戏规则,能在活动后能养成物归原处的习惯。活动重点:分配游戏角色并投入游戏活动难点:掌握……