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/

  • 相关阅读:
    【SAS NOTE】OUTPUT
    【SAS NOTES】_NULL_
    【SAS NOTE】sas 9.2 安装
    【SAS NOTE】FREQ
    纯数学教程 Page 203 例XLI (1)
    纯数学教程 Page 203 例XLI (3)
    纯数学教程 Page 203 例XLI (2)
    Prove Cauchy's inequality by induction
    纯数学教程 Page 325 例LXVIII (15) 调和级数发散
    纯数学教程 Page 325 例LXVIII (15) 调和级数发散
  • 原文地址:https://www.cnblogs.com/chenyuanbo/p/13190638.html
Copyright © 2011-2022 走看看