临汾山东漯河饰品美体美文
投稿投诉
美文创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品
漯河衢州
兴义眉山
桂林阳泉
玉溪简阳
山东遂宁
永城新余
梧州洛阳
泸州温州
临汾清远
营口常熟
浙江大连
桐乡宜昌

如何通过策略模式简化ifelse?

10月26日 暗影泪投稿
  哈喽,大家好,我是难瓜。
  相信大家日常开发中会经常写各种分支判断语句,比如ifelse,当分支较多时,代码看着会比较臃肿,那么如何优化呢?1。什么是策略模式?
  Defineafamilyofalgorithms,encapsulateeachone,andmaketheminterchangeable。Strategyletsthealgorithmvaryindependentlyfromclientsthatuseit。
  策略模式(StrategyPattern):定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。2。策略模式定义
  Context封装角色
  它也叫做上下文角色,起承上启下的封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。
  Strategy抽象策略角色
  策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性。
  ConcreteStrategy具体策略角色
  实现抽象策略中的操作,该类含有具体的算法。3。策略模式通用代码publicclassContext{抽象策略privateS构造函数设置具体策略publicContext(Strategystrategy){this。}封装后的策略方法publicvoiddoAnything(){this。strategy。doSomething();}}publicinterfaceStrategy{策略模式的运算法则publicvoiddoSomething();}publicclassConcreteStrategy1implementsStrategy{OverridepublicvoiddoSomething(){System。out。println(ConcreteStrategy1);}}publicclassConcreteStrategy2implementsStrategy{OverridepublicvoiddoSomething(){System。out。println(ConcreteStrategy2);}}
  测试:publicclassStrategyClient{publicstaticvoidmain(String〔〕args){声明一个具体的策略StrategystrategynewConcreteStrategy1();声明上下文对象ContextcontextnewContext(strategy);执行封装后的方法context。doAnything();}}4。用策略模式改写ifelse
  假设我们要处理一个office文件,分为三种类型docx、xlsx、pptx,分别表示Word文件、Excel文件、PPT文件,根据文件后缀分别解析。4。1常规写法publicclassOfficeHandler{publicvoidhandleFile(StringfilePath){if(filePathnull){}StringfileExtensiongetFileExtension(filePath);if((docx)。equals(fileExtension)){handlerDocx(filePath);}elseif((xlsx)。equals(fileExtension)){handlerXlsx(filePath);}elseif((pptx)。equals(fileExtension)){handlerPptx(filePath);}}publicvoidhandlerDocx(StringfilePath){System。out。println(处理docx文件);}publicvoidhandlerXlsx(StringfilePath){System。out。println(处理xlsx文件);}publicvoidhandlerPptx(StringfilePath){System。out。println(处理pptx文件);}privatestaticStringgetFileExtension(StringfilePath){解析文件名获取文件扩展名,比如文档。docx,返回docxStringfileExtensionfilePath。substring(filePath。lastIndexOf(。)1);returnfileE}}
  处理逻辑全部放在一个类中,会导致整个类特别庞大,假设我们要新增一种类型处理,比如对于2007版之前的office文件,后缀分别是docxlsppt,那我们得增加elseif逻辑,违反了开闭原则,如何解决这种问题呢,答案就是通过策略模式。4。2策略模式改写publicinterfaceOfficeHandlerStrategy{voidhandlerOffice(StringfilePath);}publicclassOfficeHandlerDocxStrategyimplementsOfficeHandlerStrategy{OverridepublicvoidhandlerOffice(StringfilePath){System。out。println(处理docx);}}
  省略OfficeHandlerXlsxStrategyOfficeHandlerPptxStrategy类publicclassOfficeHandlerStrategyFactory{privatestaticfinalMapString,OfficeHandlerStrategymapnewHashMap();static{map。put(docx,newOfficeHandlerDocxStrategy());map。put(xlsx,newOfficeHandlerXlsxStrategy());map。put(pptx,newOfficeHandlerPptxStrategy());}publicstaticOfficeHandlerStrategygetStrategy(Stringtype){returnmap。get(type);}}
  测试:publicclassOfficeHandlerStrategyClient{publicstaticvoidmain(String〔〕args){StringfilePathC:file123。StringtypegetFileExtension(filePath);OfficeHandlerStrategystrategyOfficeHandlerStrategyFactory。getStrategy(type);strategy。handlerOffice(filePath);}privatestaticStringgetFileExtension(StringfilePath){解析文件名获取文件扩展名,比如文档。docx,返回docxStringfileExtensionfilePath。substring(filePath。lastIndexOf(。)1);returnfileE}}4。策略模式优点
  算法可以自由切换
  这是战略模式本身定义的,只要实现抽象策略,它就成为策略家族的一个成员,通过封装角色对其进行封装,保证对外提供自由切换的策略。
  避免使用多种条件判断
  简化多种ifelse,或多个switchcase分支。
  扩展性良好
  增加一个策略,只需要实现一个接口即可。5。策略模式应用场景
  多个类型只有在算法或行为上稍有不同的场景。
  算法需要自由切换的场景。
  需要屏蔽算法规则的场景。
投诉 评论

德华00亚瑟,被队友开会,1200多局49的胜率,出装走位都陌陌聊游戏,给您带来最新最快的王者资讯!S28赛季结束的时间基本已经是确定的了,就是在9月21日的晚上。离S29新赛季还有不到10天的时间了,网友们对目前的段位是否满意的……这只翻倍牛股,去年底你敢买入潜伏吗?双城药业,目前牛气冲天的明星股之一,今年的翻倍牛股。(这里并非荐股,本人也未买卖这只股票,仅是为了例证分析。)假如去年四季度,有人告诉你,双城药业现在买入,近两年将大概率……放下和烂人烂事纠缠,命才会越来越好烂人烂事不仅会影响我们的心情,更会影响我们的运气。因为,烂人烂事都会负能量爆棚,我们长期和他们纠缠,自己也会变得消极而斤斤计较。我们在生活中会遇到形形色色的人和各种各样的……大庆有2座国家一级博物馆,还有3座国家三级博物馆大庆,位于黑龙江省西部,是全国有名的石油城。提到大庆,除了石油,人们还会想到铁人王进喜。为纪念铁人,这里专门设立了一座王进喜纪念馆,目前是国家一级博物馆。另外还有几座石油……中国太阳卫星网初步建成!能解答地球小冰河之谜?关系或不大2022年10月,中国发射夸父一号太阳卫星之后,引发了不少人对太阳卫星的探索热议,并且,甚至还联想到了大家说的太阳变化引发我们地球进入小冰河的事情。这不,在中国夸父一号发……如何通过策略模式简化ifelse?哈喽,大家好,我是难瓜。相信大家日常开发中会经常写各种分支判断语句,比如ifelse,当分支较多时,代码看着会比较臃肿,那么如何优化呢?1。什么是策略模式?Defi……炸蘑菇总是不脆?关键在于调糊,分享脆皮糊的做法,凉了照样酥脆炸蘑菇总是不脆?关键在于调糊,分享脆皮糊的做法,凉了照样酥脆炸蘑菇,让我看看有多少人爱吃?说真的,我从小就讨厌吃蘑菇,菌菇类的都不喜欢,桌子上看到有它,瞬间心情就不好了。……2天之内5个瓜,未婚先孕醉酒性侵低调领证,都是男女那些事头条创作挑战赛明星艺人们有着不同普通人的热度,但他们也失去一些自由。任何的一个举动都会成为大众的谈资,在这短短2天之内,娱乐圈就发生了不少事情。有知名富二代疑似未婚……下赛季继续征战F1面对质疑,周冠宇给出最佳回应中新网北京9月27日电(记者岳川)北京时间27日,阿尔法罗密欧F1车队ORLEN官方宣布,车队将与中国车手周冠宇继续携手,共同征战2023赛季世界一级方程式锦标赛。世界一……余光中15条语录,人生如逆旅,我亦是行人余光中,当代作家、诗人、学者、翻译家,著有《余光中诗选》、《乡愁》、《听听那冷雨》、《白玉苦瓜》等。人生如逆旅,我亦是行人。人生是一场艰难的旅程,我们都是天地间的过客。……每周新游预告01。02本周(12。2701。02)新游预告:1、【命运因子】《命运因子》是一款废土都市题材的开放世界合作生存手游,是一款关于合作与希望的游戏,支持24人联机。故事发生在名……阿娇喝奶茶照片曝光,2小时浏览量破1200万,网友赏心悦目1月5日,有一位时尚博主在网上晒出了一组阿娇喝奶茶的照片,并配文阿娇喝奶茶的照片,穿挂脖装扎马尾辫,造型时尚,气质清纯,喝奶茶的样子好美,令人有心动的感觉,也许这就是所谓的巨星……
少陵塬上的揽月阁位于西安市航天基地辖区内的揽月阁,与大雁塔遥相呼应,是西安唐文化轴的南部重要节点和标志性建筑。揽月阁高约100米,内部陈列有与中国航天相关的展览,不过由于各方原因,揽月阁从建成……勇士三连败,维金斯库里拼尽全力!怀斯曼该批,克莱成为球队隐患NBA常规赛继续进行,热火主场迎战勇士。此前勇士3胜4负,排名西部第11,最近连续输给黄蜂(加时)和活塞;热火2胜5负,排名东部第13,处境都不算好,不过这两支球队都具备成为分……俄罗斯JOOM电商平台怎么样?好做吗?最近俄罗斯JOOM电商平台很火,很多小伙伴可能对JOOM平台还是很陌生,今天这一期ice就为大家详细的介绍一下俄罗斯JOOM。2016年,Joom成立于拉脱维亚的里加,集……个人成长快乐是一种心境头条创作挑战赛不满足未必是不好的心理状态,重点是我们如何让它成为正面有用的成长动力。社会的进步,人生的成长,其实就是依靠人想要追求更美好、更安稳的生活。我们都知道知……穿越发展周期,vivo做对了哪几件事提起粤港澳大湾区,大多数人脑海中都不会立刻蹦出东莞这两个字。相较于声名远扬的广州和深圳,夹在二者之中的东莞,似乎显得格外低调含蓄。而在珠三角城市群东西岸交汇处,也就是粤港澳大湾……李KK靠魔性广普走红,10个月涨粉900多万,却因捐款少被指李KK靠塑料普通话出圈,魔性广普能代表广西吗?凭借一句表哥我来了哦圈粉九百多万,拥有清纯的长相,却有拖拉机般的声音,还被网友大骂抹黑家乡,表妹李KK的魔性广普,到底是原声……关节炎有哪些注意事项?如果患上了关节炎的话,患者需要在心理,饮食,生活护理方法多加注意,只有方方面面都考虑到了,大家才能保证治疗的效果。如果片面的看待疾病的话,将会让大家的疾病很难治愈。在生活……生育能力强的男性,一般有这3个特点,看看你有吗?近些年,随着经济水平的大幅提高,一些快速发展带来的弊端也开始显现,比如不孕率呈年轻化趋势,并不断上升。不恰当的生活方式、环境污染、食品污染等都可能导致不孕不育。很多夫妻在结婚后……四五十岁女人最好少穿牛仔裤,今年流行这么穿,每一个都洋气减龄牛仔裤挺经典的,但是在夏天总穿牛仔裤你会觉得烂大街,也会有一些沉闷,这个季节要穿得清凉,要穿得时尚,四五十岁的女性也可以尝试不同的单品,除了牛仔裤,还有下面这些服装都可以入手,……ACSNano吉林大学柔性AIE水凝胶用于现场监测农药降解功能化水凝胶得益于刺激响应特性和强大的负载能力,有利于传感装置的制造。近日,科研人员通过在双网络水凝胶中嵌入金纳米簇类沸石咪唑骨架(AuNCsZIF)复合材料来设计聚集诱导发射……便宜又好用的维C银翘片,不仅清热解毒治感冒,还可治疗这5种病大家好,我是赵医生,维C银翘片大家应该都知道,就用清热解毒的功效,可以用来治疗风热感冒,但今天我告诉你,维C银翘片不仅可以清热解毒,治疗风热感冒,还可以治疗这几种病。首先……国务院发布重磅文件支持山东深化新旧动能转换推动绿色低碳高质量日前,国务院印发《关于支持山东深化新旧动能转换推动绿色低碳高质量发展的意见》,全文如下:国务院关于支持山东深化新旧动能转换推动绿色低碳高质量发展的意见国发〔2022〕18……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找