java 策略模式if else,Java如何优化大量的if else

105 阅读1分钟

设计方式一

Map+Java8 函数式接口

// 声明一个 map  
 function  
第一个参数就是 方法里需要接的参数的数据类型
第二个就是  方法里里返回值的数据类型 
//对 Function 不太理解可以去百度 一下 
    public static Map<String,Function<YsFiles, YsFiles>> storageTypeList=new HashMap<>();

   //然后 向这个 map  put 所需要调用的 方法 
   public static Map<String, Function<YsFiles, YsFiles>> getStorageTypeList(){
        if(CollectionUtils.isEmpty(storageTypeList)){
        //   storageTypeList.put("传进来的类型" , 调用的具体方法);
            storageTypeList.put("oss" , FilesUtil::oss);
             storageTypeList.put("file" , FilesUtil::file);
             // 如果 后续  还有 第二种  类型 直接 在 map  里put 一个新的方法 就可以了
        }
        return storageTypeList;
    }
    
//调用
  public static void setFileList(YsFiles ysFiles){
        
        // 如果 传过来的是 ysFiles.getStorageType()  是 oss 就调用 map 里 oss 对应的方法 
        // 如果 后续  还有 第二种  类型 直接 在 map  里put 一个新的方法 就可以了
         Function<YsFiles, YsFiles> result =  getStorageTypeList().get(ysFiles.getStorageType());
            result.apply(item);
    }
    
//调用的具体方法 
    public static YsFiles oss(YsFiles ysFiles){
        System.out.println(ysFiles+"213211111111111");
        return ysFiles;
    }

方式二

也可以定义成 接口 子类 实现不同的接口 然后根据类型调用不同的接口