美文网首页
java switch重构

java switch重构

作者: Ray昱成 | 来源:发表于2019-04-22 20:31 被阅读0次

背景

原代码中存在一个switch语句,用于model转VO操作,因为model是抽象类要转成不同的VO,所以用了大量的switch语句

AbstractModel model;  // 抽象模型
String type=model.getType();
 //根据不同类型转换成视图对象
switch(type){
 case "A":
        convertA(model);
case "B":
        convertB(model);
      .......
case "N":
        convertN(model);
}

此类代码可读性较差,而且稍有不慎可能会走到下一个case里面,引发错误

分析解决方法

使用多态、策略模式

  • 定义convert接口和策略实现
    public interface BaseConvert<T extends AbstractModel>{
    VO convert(T model);
    }

public class ConvertA<A>{
VO convert(A model){ ... 省略};
}

  • 调用具体策略
    Map<String,BaseConvert> map=new HashMap(); // map初始化省略
    VO vo=map.get(model.getType()).convert;

  • 这种方法的问题是我必须创建大量的类/匿名类

使用函数式接口Function

  • 定义Convert类
public final class Convert{
   /** 默认map容量*/
    private final static int   INIT_MAPPING_CAPACITY = 32;

    /** type映射VO转换方法*/
    private static final Map<String, Function<AbstractModel, VO>> map;

    /**
     * 初始化mapping
     */
    static {
      map=new  HashMap<>(INIT_MAPPING_CAPACITY);
      // 当类型是A 调用convertA
      map.put("A", (model) ->convertA(model));
      map.put("B", (model) ->convertB(model));
      .......
      map.put("N", (model) ->convertN(model));
    }

   //  声明convertA、convertB 略过

/**
     * model转VO
     * @param model
     * @return  VO
     */
    public static VO dataMappingVO(AbstractModel model) {
        return Optional.ofNullable(map.get(model.getType)).orElse((model) ->  null).apply(model);
    }
}
  • 调用convert
AbstractModel model;  // 抽象模型定义省略
VO vo=Convert.dataMappingVO(model);
  • 此种方式既不用写太多的类,可读性也会更高。

参考:https://codeday.me/bug/20190109/489447.html

相关文章

  • java switch重构

    背景 原代码中存在一个switch语句,用于model转VO操作,因为model是抽象类要转成不同的VO,所以用了...

  • 去除if-else

    01 臃肿示例 1.1 if-else 1.2 case-switch 02 重构 2.1 工厂方式重构 (1)抽...

  • Kotlin常用语法

    java中的switch kotlin使用when代替java中的switch,但比switch强大的多 for循环

  • Java14新特性:Switch表达式

    Java 14正式发布switch表达式特性。在之前的两个 Java 版本Java12,Java13,switch...

  • 命令模式 -- 实践

    学习命令模式后,使用命令模式对项目中switch做一些优化在重构一书Switch Statements(switc...

  • Kotlin基础之 When表达式

    Kotlin中的When表达式就是java中的switch case语句 我们在java中这样写switch ...

  • java基础,每天都应该复习

    1.Java语言基础(选择结构switch语句的格式及其解释)(掌握) A:switch语句的格式 switch(...

  • 待看书籍-02-26

    《Effective Java》 《Java编程思想》 《重构:改善既有代码质量》

  • 2018-11-04

    java switch-case switch(表达式) 表达式: 可以是byte,short,int,char ...

  • Android面试题收藏

    J2EE 部分: Switch能否用string做参数?在 Java 7 之前, switch 只能支...

网友评论

      本文标题:java switch重构

      本文链接:https://www.haomeiwen.com/subject/mkougqtx.html