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

 更新时间:2023年05月18日 11:08:17   作者:多喝灬丶烫水  
这篇文章主要为大家介绍了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 设策略模式的资料请关注脚本之家其它相关文章!

相关文章

  • SpringBoot2.7.14整合redis7的详细过程

    SpringBoot2.7.14整合redis7的详细过程

    这篇文章主要介绍了SpringBoot2.7.14整合redis7的详细过程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-10-10
  • java Timer 定时每天凌晨1点执行任务

    java Timer 定时每天凌晨1点执行任务

    这篇文章主要介绍了java Timer 定时每天凌晨1点执行任务的代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Java实现超市会员管理系统

    Java实现超市会员管理系统

    这篇文章主要为大家详细介绍了Java实现超市会员管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Java基础之this关键字的使用

    Java基础之this关键字的使用

    今天给大家带来的是关于Java基础的相关知识,文章围绕着this关键字的使用展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • 深入探究Java中的HashMap为什么会产生死循环

    深入探究Java中的HashMap为什么会产生死循环

    HashMap 死循环发生在 JDK 1.8 之前的版本中,这篇文章主要来和大家深入探究一下为什么Java中HashMap会产生死循环,感兴趣的小伙伴可以了解一下
    2023-05-05
  • Springboot Mybatis-Plus数据库单元测试实战(三种方式)

    Springboot Mybatis-Plus数据库单元测试实战(三种方式)

    这篇文章主要介绍了Springboot Mybatis-Plus数据库单元测试实战(三种方式),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • @GrpcServise 注解的作用和使用示例详解

    @GrpcServise 注解的作用和使用示例详解

    @GrpcService 是一个 Spring Boot 处理器,它会查找实现了 grpc::BindableService 接口的类,并将其包装成一个 Spring Bean 对象,这篇文章主要介绍了@GrpcServise 注解的作用和使用,需要的朋友可以参考下
    2023-05-05
  • Java多线程并发编程和锁原理解析

    Java多线程并发编程和锁原理解析

    这篇文章主要介绍了Java多线程并发编程和锁原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Android仿微信实现左滑显示删除按钮功能

    Android仿微信实现左滑显示删除按钮功能

    这篇文章主要为大家详细介绍了java仿微信实现左滑显示删除按钮功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • 利用JDBC的PrepareStatement打印真实SQL的方法详解

    利用JDBC的PrepareStatement打印真实SQL的方法详解

    PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程,下面这篇文章主要给大家介绍了关于利用JDBC的PrepareStatement打印真实SQL的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07

最新评论