1.前言策略模式可能是工作中使用最多的,也是面试中提到频率最高的,代码重构优化必须有!小编之前一直说,其实没有真正的实战;最近有机会做实战,就分享一下自己的经验,在企业层面使用!二、策略模式1、什么是策略模式strategypattern,英文全称是StrategyDesignPattern。在GoF的《设计模式》一书中,是这样定义的:定义一族算法类,将各个算法分别封装起来,使其可以相互替代。Strategy模式可以独立于使用它们的客户端(这里的客户端是指使用算法的代码)对算法进行更改。2.策略模式结构由Strategy:抽象策略类,一般为接口或策略类ConcreteStrategy:具体算法实现策略类Context:环境或上下文类,用于统一执行具体策略其实以上三部分在解释中大白话:需要一个接口和策略,对接口和方法进行标准化和约束。这时候就需要一些具体的实现算法类来继承或者实现刚才的接口和策略。最后,通过一个environment或者context,也可以叫做工厂,根据类型来调用具体的算法!3、使用场景避免冗长的if-else或switch分支判断。需要动态地选择几种算法中的一种来向客户端隐藏特定策略(算法)的实现细节。它们之间是完全独立的,其余不受影响的具体场景一般都会扩展。:选择支付方式折扣,选择全额折扣方式根据类型调用不同的系统4.优缺点优点:可扩展性好,符合开闭原则,符合单一职责原则,可读性好,容易维护,避免多层判断缺点:策略太多,导致策略类对新手阅读代码不友好三、策略模式实战1、实例实例今天,小编需要根据四个做不同的事情春夏秋冬四季展示攻略模式使用方案;要求是:如果是春天,一定要放行;如果是夏天,就得去游泳。如果是秋天,一定要去看枫叶。如果是冬天,你必须去打雪仗。如果不用策略模式,那一定是if-ifelse来实现!下面就带大家体验一下具体的使用吧!!2.策略接口/***四季策略*@authorwangzhenjun*@date2022/12/19:30*/publicinterfaceSeasonsStrategy{/***根据季节执行不同的计划*@paramseasons*@return*/Stringexecute(Stringseasons);}3.Spring具体实现/***Spring具体实现*@authorwangzhenjun*@date2022/12/19:34*///指定容器名称,如果没有指定,默认是一个class名称首字母小写@Component("spring")publicclassSpringStrategyimplementsSeasonsStrategy{@OverridepublicStringexecute(Stringseasons){returnseasons+"我们来了!一起去放风筝吧!";}}4。暑期具体实现/***暑期具体实现*@authorwangzhenjun*@date2022/12/19:34*///指定容器名称,不指定默认为类名首字母小写@Component("summer")publicclassSummerStrategyimplementsSeasonsStrategy{@OverridepublicStringexecute(Stringseasons){returnseasons+"我们来了!一起去游泳吧!";}}5。Autumn具体实现/***Autumn具体实现*@authorwangzhenjun*@date2022/12/19:34*///指定容器名称,不指定默认为类的小写首字母name@Component("autumn")publicclassAutumnStrategyimplementsSeasonsStrategy{@OverridepublicStringexecute(Stringseasons){returnseasons+"我们来了!一起去看枫叶吧!";}}6.Winter具体实现/***Winter具体实现*@authorwangzhenjun*@date2022/12/19:34*///指定容器名称,不指定默认为首字母小写的类名@Component("winter")publicclassWinterStrategyimplementsSeasonsStrategy{@OverridepublicStringexecute(Stringseasons){returnseasons+"我们来了!让我们去打雪仗吧!";}}7.上下文工厂实现privateMap
