网站建设与运营培训班,怎样学习做网站的编程,抖音seo排名软件哪个好,蒙阴哪有做淘宝网站的1、什么是策略模式
策略模式其实也是在解耦#xff0c;把策略的定义、创建、使用这三个部分解耦开来#xff0c;因为本身策略模式也是基于接口编程#xff0c;这样其实可以简单的理解客户端调用使用接口进行编程#xff0c;可以通过工厂方法创建对应的策略模式#xff0c…1、什么是策略模式
策略模式其实也是在解耦把策略的定义、创建、使用这三个部分解耦开来因为本身策略模式也是基于接口编程这样其实可以简单的理解客户端调用使用接口进行编程可以通过工厂方法创建对应的策略模式进而完成对应的程序功能。
2、代码实现
如果我们通过会员类型来判断会员权益的话通常通过if-else来实现但是如果会员类型很多的话就会产生很多的if-else这会显得不太雅观。所以这个时候策略模式出现了。
普通if-else实现
public class DemoTest {public Object cal(String type){if (type.equals(L1)){return L1 10;}else if (type.equals(L2)){return L2 20;}return 0;}
}使用策略模式 主要的思路是创建一个策略接口以及多个实现该接口的类。同时还要创建一个工厂内聚所有的策略类。
//策略接口
public interface MemberStrategy {//计算会员权益Object cal();//会员类型值String getSupportType();
}
//策略类1
Component
public class CommonMemberStrategy implements MemberStrategy{Overridepublic Object cal() {return L1 10;}Overridepublic String getSupportType() {return L1;}
}//策略类2
Component
public class UpperMemberStrategy implements MemberStrategy{Overridepublic Object cal() {return L2 20;}Overridepublic String getSupportType() {return L2;}
}//策略工厂
Component
Slf4j
public class MemberStrategyFactory {//注入所有的策略接口类AutowiredListMemberStrategy memberStrategies;public MemberStrategy getStrategyByType(String type){for (MemberStrategy memberStrategy : memberStrategies) {if (type.equals(memberStrategy.getSupportType())){return memberStrategy;}}return null;}}
//接口测试类
RestController
RequestMapping
public class StrategyRest {AutowiredMemberStrategyFactory memberStrategyFactory;RequestMapping(/strategy)public Object strategy(RequestParam String type){MemberStrategy memberStrategy memberStrategyFactory.getStrategyByType(type);return memberStrategy.cal();}
}测试
如果我们调用接口/strategy并且参数tyoeL1的话预期返回L1 10。
下面用postman测试下结果和预期是一样的
3、总结
1、策略模式提供了对“开闭原则”的完美支持用户可以在不修改原有系统的基础上选择算法或行为也可以灵活地增加新的算法或行为。 2、但是策略模式将造成产生很多策略类增加代码的复杂度。