java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java 策略模式

java设计模式之策略模式在促销活动场景中的使用案例

作者:多喝灬丶烫水

这篇文章主要为大家介绍了java设计模式之策略模式在促销活动场景中案例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

概念

使用方式

业务场景

促销活动

一家百货公司在定年度的促销活动。针对不同的节日(春节、中秋节、圣诞节)推出不同的促销活动,由促销员将促销活动展示给客户。

代码实现

定义一个公共接口或者抽象类

public interface FestivalStrategy {
     FestivalEnum getFestivalEnum();
     void show();
 }

每个方式(策略)去实现该接口或者抽象类

@Service
 public class NewYearStrategy implements FestivalStrategy{
     @Override
     public FestivalEnum getFestivalEnum() {
         return FestivalEnum.CHINESE_NEW_YEAR;
     }
     @Override
     public void show() {
         System.out.println("春节活动");
     }
 }
@Service
 public class MidAutumnStrategy implements FestivalStrategy {
 
     @Override
     public FestivalEnum getFestivalEnum() {
         return FestivalEnum.MID_AUTUMN;
     }
 
     @Override
     public void show() {
         System.out.println("中秋活动");
     }
 }
@Service
 public class ChristmasStrategy implements FestivalStrategy {
 
     @Override
     public FestivalEnum getFestivalEnum() {
         return FestivalEnum.CHRISTMAS;
     }
 
     @Override
     public void show() {
         System.out.println("圣诞活动");
     }
 }

定义一个环境类去调用不同的策略

@Component
 public class FestivalStrategyUseService implements ApplicationContextAware {
     private Map<FestivalEnum,FestivalStrategy>  festivalStrategyMap =new HashMap<>();
     @Override
     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
         Map<String, FestivalStrategy> tmepMap = applicationContext.getBeansOfType(FestivalStrategy.class);
         tmepMap.values().forEach(strategyService -> festivalStrategyMap.put(strategyService.getFestivalEnum(), strategyService));
     }
     public void showFestivalAndContext(FestivalEnum festivalEnum) {
         FestivalStrategy festivalStrategy = festivalStrategyMap.get(festivalEnum);
         if (festivalStrategy != null) {
             System.out.println("现在正值"+festivalStrategy.getFestivalEnum().getName()+"佳节");
             festivalStrategy.show();
         }
     }
 }

或者

@Component
 public class FestivalStrategyUseService {
      @Autowired
     private Map<String,FestivalStrategy>  festivalStrategyMap;
     public void showFestivalAndContext(String festivalEnum) {
         FestivalStrategy festivalStrategy = festivalStrategyMap.get(festivalEnum);
         if (festivalStrategy != null) {
             System.out.println("现在正值"+festivalStrategy.getFestivalEnum().getName()+"佳节");
             festivalStrategy.show();
         }
     }
 }

调用

@Autowired
 FestivalStrategyUseService festivalStrategyUseService;
 
 @Test
 public void test3(){
     //第一种
     festivalStrategyUseService.showFestivalAndContext(FestivalEnum.CHINESE_NEW_YEAR);
     //第二种
     festivalStrategyUseService.showFestivalAndContext("NewYearStrategy");
 }

结果

现在正值春节佳节
春节活动:买一送一

以上就是java设计模式之策略模式在促销活动场景中案例详解的详细内容,更多关于java 设策略模式的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文