当前位置: 首页 > 后端技术 > Java

设计模式-策略模式

时间:2023-04-02 02:01:15 Java

策略模式1.定义和类型定义:定义算法族,分别封装,使它们可以相互转换,这种模式使得算法的改变不影响使用算法的用户if...else类型:behaviortype2。适用场景系统有很多种,它们的区别只是行为不同。系统需要动态地选择几种算法中的一种。3.优点开闭原则避免了使用多个条件传递语句,提高了算法的保密性和安全性Security4.缺点客户端必须知道所有的策略类,并决定使用哪个策略类来生成很多策略类.5.相关设计模式StrategyModeandFactoryModeStrategyModeandStateMode6.CodingStrategyModeProcessingFactoryMode创建策略接口PromotionpublicinterfacePromotionStrategy{voiddoPromotion();}创建一系列促销策略publicclassFanXianPromotionStrategyimplementsPromotionStrategy{@OverridepublicvoiddoPromotion(){System.out.println("返现促销,返还余额存入用户余额中!");}}publicclassLiJianPromotionStrategyimplementsPromotionStrategy{@OverridepublicvoiddoPromotion(){System.out.println("即时打折促销,课程价格直接从配置价格中扣除");}}publicclassManJianPromotionStrategyimplementsPromotionStrategy{@OverridepublicvoiddoPromotion(){System.out.println("满减促销:满200减20");}}创建促销活动:用于实现促销策略的类publicclassPromotionActivity{privatePromotionStrategystrategy;公共推广活动(PromotionStra策略){this.strategy=strategy;}publicvoidexecuteStrategy(){strategy.doPromotion();}}创建推广策略工厂/***@program:design_pattern*@description:推广策略工厂*@create:2021-10-1322:23**/publicclassPromotionStrategyFactory{/**私有构造函数*/privatePromotionStrategyFactory(){}privatestaticfinalMapPROMOTION_STRATEGY_MAP=newHashMap<>();//初始化工厂static{PROMOTION_STRATEGY_MAP.put(PromotionType.FANXIAN,newFanXianPromotionStrategy());PROMOTION_STRATEGY_MAP.put(PromotionType.LIJIAN,newLiJianPromotionStrategy());PROMOTION_STRATEGY_MAP.put(PromotionType.MANJIAN,newLiJianPromotionStrategy());PROMOTION_STRATEGY_MAP.put(PromotionType.MANJIAN,newFanXianPromotionStrategy())由/ManjianyPromotion对外提供)**获取策略的方法*/publicstaticPromotionStrategygetPromotionStrategy(StringpromotionKey){PromotionStrategypromotionStrategy=PROMOTION_STRATEGY_MAP.get(promotionKey);返回promotionStrategy==null?null:promotion战略;}privateinterfacePromotionType{StringLIJIAN="LIJIAN";StringMANJIAN="MANJIAN";StringFANXIAN="范闲";}}测试类publicclassTest{publicstaticvoidmain(String[]args){StringpromotionKey="LIJIAN";PromotionActivitypromotionActivity=newPromotionActivity(PromotionStrategyFactory.getPromotionStrategy(promotionKey));promotionActivity.executeStrategy();}}控制台输出:7.总结策略模式结合工厂模式减少if...else代码,改进代码代码的解耦策略类有共同的行为,为了效率和可维护性,但是这种行为的结果是不同的