zoukankan      html  css  js  c++  java
  • 设计模式-策略模式

    测试模式在我们代码中使用频率比较高,其主要作用是解决多重判断的问题,具体代码如下:

    业务类相关代码:

    //根据前台传递的专项代码获取专项代码查询对应的子类beanId
    String strategyBeanId = SpecialEnum.getName(declarationPramDTO.getZxdm());
    if (StringUtils.isBlank(strategyBeanId)) {
        throw new BizException("所传递专项类型渠道不存在");
    }
    DeclarationStrategy declarationStrategy = SpringUtils.getBean(strategyBeanId, DeclarationStrategy.class);
    if (null == declarationStrategy) {
        //该渠道不存在,请确认
        throw new BizException("该渠道不存在,请管理员确认");
    }
    try {
        return declarationStrategy.exportDeclaration(request, declarationPramDTO);
    }catch (Exception e){
        e.printStackTrace();
        throw new BizException("系统错误,请联系管理员");
    }

    枚举类:

    根据专项代码获取对应的beanId

    public enum SpecialEnum {
    
        /** 首台套 */
        STT("STT","首台套"),
    
        /** 国家中小企业公共服务示范平台奖励项目
     */
        GJSFJL("GJSFJL","enterpriseServeAward"),
    
        /** 首台套保险 */
        STTBF("sttbf","NMTInsurance")
        ;
    
        private String index;
    
        private String desc;
    
        SpecialEnum(String index, String desc) {
            this.index = index;
            this.desc = desc;
        }
    
        public String getIndex() {
            return index;
        }
    
        public void setIndex(String index) {
            this.index = index;
        }
    
        public String getName() {
            return desc;
        }
    
        public void setName(String desc) {
            this.desc = desc;
        }
    
        public static String getName(String index){
            SpecialEnum[] enums = SpecialEnum.values();
            for (SpecialEnum eventEnum : enums){
                if (eventEnum.getIndex().equals(index)){
                    return eventEnum.getName();
                }
            }
            return "";
        }
    }
    

      spring  工具类:

    @Component
    public class SpringUtils implements ApplicationContextAware {
    
        private static ApplicationContext applicationContext;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.applicationContext = applicationContext;
        }
    
        //获取applicationContext
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
        //通过name获取 Bean.
        public static Object getBean(String name){
            return getApplicationContext().getBean(name);
        }
    
        //通过class获取Bean.
        public static <T> T getBean(Class<T> clazz){
            return getApplicationContext().getBean(clazz);
        }
    
        //通过name,以及Clazz返回指定的Bean
        public static <T> T getBean(String name,Class<T> clazz){
            return getApplicationContext().getBean(name, clazz);
        }
    }
    

      策略接口:

    public  interface  DeclarationStrategy {
    
        /**
        *
        * @Author  cyb
        * @Date   2020-06-23 9:53
         * @param request
         * @param declarationPramDTO:导出申报书参数实体
        * @return      java.lang.String
        * @Exception
        */
         String exportDeclaration(HttpServletRequest request, DeclarationPramDTO declarationPramDTO) throws Exception;
    
    }
    

      策略子类实现:

    public class EnterpriseServeAward implements DeclarationStrategy {
        @Override
        public String exportDeclaration(HttpServletRequest request, DeclarationPramDTO declarationPramDTO) {
            return "进入国家中小企业公共服务示范平台奖励项目专项";
        }
    }
    

      以上代码及为策略模式的对应相关代码,主要的是枚举中子类beanId,如果子类名称为单词组成,则首字母需小写,如果子类名称为单词简写(字母大写),则枚举中的beanId则与策略子类名称一致,不用首字母小写。获取beanId也可以将对应数据存放在数据库中进行读取,不使用枚举。

    以上即为本篇博客内容,如若对以上有所以为请留言或者私聊博主,转发请说明出处,本人博客地址为:https://www.cnblogs.com/chenyuanbo/

  • 相关阅读:
    Js 之判断某月有几天
    Java 之c3p0连接池对实体 "useSSL" 的引用必须以 ';' 分隔符结尾
    SQL真题实战(大厂真题)——来自牛客题霸
    公共api
    Windows下搭建redis 哨兵环境
    hibernate查询不到关联对象列表fetchType的选择
    「IOI2021」Dungeons
    「Gym103261H」Greedy Algorithm
    「牛客」牛半仙的妹子序列
    「UOJ 632」挑战最大团
  • 原文地址:https://www.cnblogs.com/chenyuanbo/p/13190638.html
Copyright © 2011-2022 走看看