一、前言策略模式可能是工作中使用最多的,也是面试中提到最多的。代码重构优化必备!小编之前一直说,其实没有真正的实战;最近有机会做实战,就分享一下自己的经验,在企业层面使用!二、策略模式1、什么是策略模式strategypattern,英文全称是StrategyDesignPattern。在GoF的《设计模式》一书中,是这样定义的:定义一族算法类,将各个算法分别封装起来,使其可以相互替代。Strategy模式可以独立于使用它们的客户端(这里的客户端是指使用算法的代码)对算法进行更改。2、策略模式的结构组成Strategy:一个抽象的策略类,一般是一个接口或者一个策略类。ConcreteStrategy:具体算法实现策略类。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*///指定容器名称,如果没有指定,默认是一个类名称首字母小写@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*///指定容器名称,不指定则类名首字母小写@Component("autumn")publicclassAutumnStrategyimplementsSeasonsStrategy{@OverridepublicStringexecute(Stringseasons){returnseasons+"我们来了!我们去看枫叶吧!";}}6。冬季具体实现/***冬季具体实现*@authorwangzhenjun*@date2022/12/19:34*///指定容器名称,不指定默认为容器的小写首字母类名@Component("winter")publicclassWinterStrategyimplementsSeasonsStrategy{@OverridepublicStringexecute(Stringseasons){returnseasons+"我们来了!一起去打雪仗吧!";}}7.上下文工厂实现privateMap
