应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

Springboot运用策略模式实现,避免多次使用if

  前言
  这里就不详细去介绍策略模式是怎么样的了,想了解的可以点击下面的链接
  策略模式介绍的链接:策略模式的介绍
  这里列出策略模式的好处
  场景:某网页有个支付,其中包含了微信、支付宝等方式的支付方式,后续明确还会进行兼容其他的支付方式
  用策略模式的好处:避免多次使用if判断具体是用哪种支付策略进行操作。因为每种策略(微信支付、支付宝支付)的内容都比较复杂。策略模式能将每种策略分离出来,方面后续维护管理
  下面我们将使用Springboot运用策略模式,实现上面的需求环境配置JDK8Springboot2。3。7。RELEASE整合了springbootstarterweb实现目标
  使用策略模式后,新加一种支付策略时,只需要在策略枚举中添加新加的策略信息,外加一个策略类即可,而不再需要添加新的if判断。准备策略接口和具体实现策略类支付策略接口支付策略publicinterfacePayStrategy{支付(参数就没具体写了,可以定义成每个支付必须要有的参数)returnbooleanpay();}复制代码微信支付策略类第三方微信支付(这里注意我修改了Bean的默认命名)Component(wechatPayStrategy)publicclassWeChatPayStrategyImplimplementsPayStrategy{支付returnOverridepublicbooleanpay(){进行微信的支付逻辑System。out。println(正在进行微信的支付逻辑);returntrue;}}复制代码支付宝支付策略类支付宝第三方支付(这里注意我修改了Bean的默认命名)Component(alipayStrategy)publicclassAliPayStrategyImplimplementsPayStrategy{支付宝支付returnOverridepublicbooleanpay(){进行支付宝支付逻辑System。out。println(进行支付宝支付逻辑);returntrue;}}复制代码
  上述已将各自的策略的处理类进行了分离,接下来时使用支付策略工厂类和支付策略上下文将各自的策略类联系起来准备支付策略上下文Context和支付策略工厂类支付策略工厂类packagecom。example。springbootstrategy。strategy。factory;importcom。example。springbootstrategy。enums。PayStrategyEnum;importcom。example。springbootstrategy。strategy。PayStrategy;importorg。springframework。stereotype。Component;importjavax。annotation。Resource;importjavax。swing。plaf。synth。SynthTextAreaUI;importjava。util。Map;支付策略工厂类ComponentpublicclassPayStrategyFactory{通过Spring容器的方式注入ResourceprivateMapString,PayStrategypayStrategyMap;获取对应支付策略类parampayStrategyEnum支付策略枚举publicPayStrategygetPayStrategy(PayStrategyEnumpayStrategyEnum){if(!payStrategyMap。containsKey(payStrategyEnum。getClassName())){System。out。println(没有对应的支付策略,无法进行支付);returnnull;}returnpayStrategyMap。get(payStrategyEnum。getClassName());}}复制代码
  这里工厂类的逻辑是利用了Spring容器的处理方式,如果有多种类同时实现了某个接口,那么可以使用Map集合接收,Map对应的泛型,String是Bean名称,PayStrategy是每个具体实现类,这样我们就可以使用Bean类型去指定具体的策略类了,然后建立一个支付策略枚举去管理这些Bean名称。同时,也可以将Bean名称与客户端定义的类型进行关联。支付策略枚举类支付策略类型publicenumPayStrategyEnum{WECHATPAY(wechat,wechatPayStrategy,微信支付),ALIPAY(alipay,alipayStrategy,支付宝支付);支付策略codeprivateStringcode;bean名称privateStringclassName;信息privateStringinfo;PayStrategyEnum(Stringcode,StringclassName,Stringinfo){this。codecode;this。classNameclassName;this。infoinfo;}publicStringgetCode(){returncode;}publicStringgetClassName(){returnclassName;}publicStringgetInfo(){returninfo;}}复制代码
  上面枚举类中code代表的是客户端定义的类型(例如我从前端接收到的支付type,这个type可以是这个code),className顾名思义,指的是每种策略的bean名称,info是代表每种策略的内容支付策略上下文支付策略上下文ComponentpublicclassPayStrategyContext{AutowiredprivatePayStrategyFactorypayStrategyFactory;支付执行parampayDTO支付参数returnpublicbooleanpayHandle(PayDTOpayDTO){将某属性的值转换成具体的枚举。这里是根据payDTO的type字段对应枚举的code进行转换OptionalPayStrategyEnumpayStrategyEnumOptionalArrays。stream(PayStrategyEnum。class。getEnumConstants())。filter((e)e。getCode()。equals(payDTO。getType()))。findAny();if(!payStrategyEnumOptional。isPresent()){System。out。println(匹配不到具体支付策略);returnfalse;}PayStrategyEnumpayStrategyEnumpayStrategyEnumOptional。get();PayStrategypayStrategypayStrategyFactory。getPayStrategy(payStrategyEnum);进行payDto参数的处理。。。。。booleanpaypayStrategy。pay();支付后的记录处理。。returntrue;}}复制代码pageDto类支付DTOpublicclassPayDTO{支付类型privateStringtype;支付金额privateBigDecimalpayMoney;。。。。。。。。。。。publicStringgetType(){returntype;}publicvoidsetType(Stringtype){this。typetype;}publicBigDecimalgetPayMoney(){returnpayMoney;}publicvoidsetPayMoney(BigDecimalpayMoney){this。payMoneypayMoney;}}复制代码
  这个策略上下文,则是选择策略的入口,这里会进行参数的处理,将这里我就将pageDTO类中的type字符串转换成对应的枚举类。
  到这里使用策略模式的编写算是完成了,下面进行编写客户端的代码客户端代码支付控制器RestControllerRequestMapping(pay)publicclassPayController{AutowiredprivatePayStrategyContextpayStrategyContext;PostMappingpublicbooleanpay(RequestBodyPayDTOpayDTO){这里因为懒就没有加上Service层了,直接在控制器处理returnpayStrategyContext。payHandle(payDTO);}}复制代码效果
  新需求
  后续新增一个银联的支付方式,我们只需要添加银联的支付策略类和添加银联的支付枚举即可实现添加银联的支付策略类银联支付(这里注意我修改了Bean的默认命名)Component(unionPayStrategy)publicclassUnionPayStrategyImpimplementsPayStrategy{银联支付returnOverridepublicbooleanpay(){进行银联的支付System。out。println(进行银联的支付逻辑);returntrue;}}复制代码在枚举类中添加银联的支付枚举支付策略类型publicenumPayStrategyEnum{WECHATPAY(wechat,wechatPayStrategy,微信支付),ALIPAY(alipay,alipayStrategy,支付宝支付),UNIONPAY(unionpay,unionPayStrategy,银联支付);支付策略codeprivateStringcode;bean名称privateStringclassName;信息privateStringinfo;PayStrategyEnum(Stringcode,StringclassName,Stringinfo){this。codecode;this。classNameclassName;this。infoinfo;}publicStringgetCode(){returncode;}publicStringgetClassName(){returnclassName;}publicStringgetInfo(){returninfo;}}复制代码实现效果
  以上是我使用Springboot运用策略模式实现的效果,如果有误人子弟的地方,望在评论区指出。

穿牛仔裤多学学赵露思,简单的搭配更美,保暖效果也不错很多人在穿黑色的裤子或者是牛仔裤的时候,选择了非常复杂的搭配方式,就是担心搭配出来的效果不怎么好看。其实牛仔裤之类的裤子能流行这么久,主要是因为百搭还有气质,搭配得简单一点,反……佛山举办文化赋能春节旅游系列文化活动,打造文化惠民新样板1月10日起,我的佛山印象千家万户绘佛山文化赋能春节旅游系列文化活动正式启动,将持续至2月25日。本次活动由佛山市文化广电旅游体育局主办,佛山市文化馆、佛山市文艺社团联盟……凭君莫话封侯事,一将功成万骨枯,崇明岛一期五大陨落型球员盘点关于徐根宝崇明岛十年磨一剑的青训故事,相信每一个中国球迷都不会陌生,20年过去了,崇明岛走出的四代青训队员早已遍布在中国职业足坛的各级别赛场,有武磊,张琳芃,颜骏凌,王燊超,朱……广东已不在辽宁的视野之内曾几何时五上五下的广东是何其的嚣张,如今缺了马尚的广东天塌了,排兵布阵捉襟见肘,怎么缺了马尚啥都不灵了,说到底就是一群蓝领根本没有什么竞争力。但凭借着裁判关照,赖皮式防守,以及……短短一周,两人因网络暴力自杀,韩国喷子也是世界文化遗产吗韩国网民的心态崩了。北京冬奥会开幕以来,韩国网友们几乎是天天抱着键盘,四处出征。一会儿指责中国朝鲜族代表穿的衣服,是抢了韩国的传统服饰;一会儿又网暴中国短道速滑队的韩裔教……新生儿出产房后第一抱很重要,这2类人,关系再亲近也要拒绝在文文爸的老家,一直都有踩生或踏生的说法,你的老家有这种说法吗?就是新生儿出产房后,谁从护士手中接过宝宝,谁就是给宝宝踩生的人。在文文爸的老家,很重视这个踩生人,用老一辈……字节跳动的25个软件测试经典面试题,你招架得住吗?文末赠送一套软件测试相关资源:软件测试相关工具软件测试练习集深入自动化测试Python学习手册Python编码规范大厂面试题和简历模板目录1、在搜索引擎中输入汉字就可以解……球王梅西,赛场外搭建商业帝国,商业触角也延伸到中国来源:环球时报【环球时报报道记者陈子帅】一代球王梅西圆梦世界杯,他的辉煌履历和传奇事迹在世界再一次被广泛传播。同时,也有更多媒体与球迷关注到他的另一面:梅西不仅在赛场上游……春节将至,分享12道年夜饭菜单,营养丰富寓意好,开心过大年过完腊八节,也就意味着即将拉开春节的序幕。春节,百节之首、四季之初,为了迎接这个最隆重的节日,人们都会在大年三十当天准备一顿丰盛的团圆饭来迎接这个一年中最隆重的节日。年尾……硬核带队方式!西热力江瞪眼指挥,队内新人真不敢碰球了CBA比赛的第5轮已经开始,同曦又输球了,以88:100不敌广州男篮,也是取得了1胜4负的战绩,基本上已经提前告别季后赛,队内拥有超级球员西热力江,他也是队内的灵魂人物,毕竟资……暗物质是真实存在的吗?各位网友,又到了和网友们分享学习的时间了,记得我每天都会准时来分享,我保证:只要你坚持每天看我的文,很快你也会成为科普达人呦。我们今天换一个话题,聊一聊时下也很热议的话题……2022年京都自由行推荐4条路线,近郊景点道之驿站全整理京都自由行怎么玩?除了大家都去过的人气景点,乐吃购!日本要推荐给大家4种路线:海之京都、森之京都、茶之京都、竹之里乙训,将京都近郊景点、道路休息站道之驿站都安排进行程,想要深度……
拍完赤子威龙后,周润发拿出5000元递给谢苗,你退出娱乐圈吧1994年,拍完《赤子威龙》后,周润发直接拿出5000元,递给10岁的谢苗,你退出娱乐圈吧,回去好好读书。王晶却说:别听他的,不是谁都能红的。谢苗当时仅仅10岁,但……位于陕西境内,秦岭山脉最高峰,海拔3767。2,你知道是哪里西上太白峰,夕阳穷登攀。太白与我语,为我开天关。愿乘泠风去,直出浮云间。举手可近月,前行若无山。一别武功去,何时更复还。这是唐朝诗人李白的《登太白峰》,这首诗描绘出了太白山的高……一篇让你学会11个Spring失效场景其实关于spring事务失效的场景,网络上文章介绍的不少,参差不齐。这里只分享下自己的见解,时长大概10分钟左右,先上个图介绍下。1。访问权限问题事务方法需要定义p……德邦物流卖身京东华人家族的进与退德邦宣传图1。hr根据媒体曝出的消息,德邦股份已基本确认并入京东,交易对价或超百亿元。如果不出意外,中国物流史上最贵的一笔收购要产生了。京东为何要买德邦,背后有怎样……特别兴奋特别自豪开幕式后,陈琦(左)和张雪梅合影留念。受访者供图真的很激动,也很自豪!此次在北京冬残奥会开幕式上担任国际残奥委会会旗执旗手的中国女子轮椅篮球国家队教练陈琦讲起现场的……CBA格局彻底乱了,4队争第一广东已出局辽宁也不稳了北京时间3月5日,CBA又出现了大爆冷,联盟领头羊上海队爆冷输给了吉林队,最多的时候一度落后对手42分之多。而在上海队输球之后,CBA榜首之争出现了最诡异一幕,上海、辽宁、广厦……5小时工作2分钟搞定!AIOps带你飞来源:计算机世界在上两篇微信《有了AI,IT运维原来可以这么轻松》和《80用过的企业都获得了回报!AIOps到底强在哪儿?》中,我们认识了AIOps和它的妙用,那它在企业……短道速滑女子1500米四分之一决赛赛况2月16日,中国选手张雨婷在比赛中。当日,北京2022年冬奥会短道速滑项目女子1500米四分之一决赛在首都体育馆举行。新华社记者熊琦摄2月16日,德国选手安娜……压哨离开湖人,拒绝4年8400万!一年换3队,还是詹姆斯适合对于一位NBA球员来说,大部分球员的目标都是为了拿到大合同,冠军对巨星的价值可能更高一些,可是对于角色球员来说,还是大合同更香一些。可是在NBA里面,有些球员因为表现好,球队会……荣耀Magic4Magic4Pro和Magic4至臻版,应该这三款手机里面,至臻版真正就建议土豪购买了:1、外观辨识度直接拉满,造型设计大胆前卫。2、拍照实力顶级规格,超大底主摄接近1英寸的大底,搭配高规格8P镜头和超大像素,还有光学防……明媚穿行独库公路之百里画廊唐布拉草原《千面南疆环行记》NO。3搭上当天第三辆车,沿着喀什河边有着百里画廊美称的公路继续向唐布拉草原进发。虽然九月底已不是她最美时节,野花们大多已不再摇曳,但因着这样明媚的好天……营养才是我们身体的原材料中老年人怎么样吃才更健康呢你知道我们的肠胃喜欢吃什么吗?现在的人吃素的越来越多了,其实荤素搭配才更健康。我们怎么样吃肠胃才喜欢呢?这是一个秘诀。这个秘诀就是吃肉的时候,吃四条腿的不如吃两条腿的。……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网