NO.57 代码优化初步 2.公共规则的抽取、可配置化

    技术2022-05-20  52

      有一天进行代码走查,发现这段代码出现在4个类中,一字不差——public String changeCurrencyCode(String currencyCode){ String newCurrencyCode = currencyCode; if("CNY".equals(currencyCode)){//人民币 newCurrencyCode = "01"; } if("HKD".equals(currencyCode)){//港币 newCurrencyCode = "02"; } if("USD".equals(currencyCode)){//美元 newCurrencyCode = "03"; } …… if("NZD".equals(currencyCode)){//新西兰元 newCurrencyCode = "20"; } return newCurrencyCode; } 1.很明显:Ctrl+CCtrl+V的;类似的规则如果发生变化或者就是笔误哪个地方写错了,难道要去改4处?2.同变量判断,却全用的if判断,把每种情况都变成最坏情况。1次改进:Public Class CurrencyRules{ public static String changeCurrencyCode(String currencyCode){ String newCurrencyCode = currencyCode; if("CNY".equals(currencyCode)){//人民币 newCurrencyCode = "01"; }else if("HKD".equals(currencyCode)){//港币 newCurrencyCode = "02"; }else if("USD".equals(currencyCode)){//美元 newCurrencyCode = "03"; } …… }else if("NZD".equals(currencyCode)){//新西兰元 newCurrencyCode = "20"; } return newCurrencyCode; } } 1.使用了else if 做了一下小小的改进2.方法改为static了,也把它放在一个规则类里了但是不是感觉还是很笨拙?2次改进:public final static Properties currencyProp = new Properties(); static { currencyProp.clear(); currencyProp.setProperty("CNY", "01"); currencyProp.setProperty("HKD", "02"); currencyProp.setProperty("USD", "03"); …… currencyProp.setProperty("NZD", "20"); } public static String changeCurrencyCode(String currencyCode){ String newCurrencyCode = currencyProp.getProperty(currencyCode); if(newCurrencyCode == null){//如果没有此映射 newCurrencyCode = currencyCode; } return newCurrencyCode; } 对于这种大量的常量映射,可以使用java.util.Properties 不过修改起来还是不方便...3次改进:  把这些配置信息放进一个CurrencyProp.properties文件中,文件和CurrencyRules.java放在同一个目录:CNY=01 HKD=02 USD=03 …… NZD=20 然后那个CurrencyRules中的static块就变成这个样子——public final static Properties currencyProp = new Properties(); static { currencyProp.load(CurrecnyRules.class.getResourceAsStream("CurrencyProp.properties")); } …    至此,一段公共规则被抽取出来了,并且易于配置。   不过如果希望规则修改后实时生效,可以放弃static方式而使用实例化方式,大家可以自己试着实现一下。


    最新回复(0)