NO.57 代码优化初步 2.公共规则的抽取、可配置化
2011-02-25 13:42
309 查看
有一天进行代码走查,发现这段代码出现在4个类中,一字不差——
1.很明显:Ctrl+C,Ctrl+V的;类似的规则如果发生变化或者就是笔误哪个地方写错了,难道要去改4处?
2.同变量判断,却全用的if判断,把每种情况都变成最坏情况。
第1次改进:
1.使用了else if 做了一下小小的改进
2.方法改为static了,也把它放在一个规则类里了
但是不是感觉还是很笨拙?
第2次改进:
对于这种大量的常量映射,可以使用java.util.Properties
不过修改起来还是不方便...
第3次改进: 把这些配置信息放进一个CurrencyProp.properties文件中,文件和CurrencyRules.java放在同一个目录:
然后那个CurrencyRules中的static块就变成这个样子——
至此,一段公共规则被抽取出来了,并且易于配置。
不过如果希望规则修改后实时生效,可以放弃static方式而使用实例化方式,大家可以自己试着实现一下。
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+C,Ctrl+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方式而使用实例化方式,大家可以自己试着实现一下。
相关文章推荐
- 爬虫代码实现二:抽取网站规则模板,优化解析代码(2)
- 代码优化之----抽取公共功能,统一功能集中化
- 爬虫代码实现二:抽取网站规则模板,优化解析代码(1)
- [置顶] spring boot项目实战之公共代码抽取
- 优化定制化abap代码必须遵守的经典黄金规则
- [置顶] spring boot项目实战之公共代码抽取
- Android ListView封装(代码优化):抽取方法共性,封装 BaseAdapter 和 ViewHolder
- [置顶] spring boot项目实战之公共代码抽取
- [置顶] spring boot项目实战之公共代码抽取
- [置顶] spring boot项目实战之公共代码抽取
- 代码简洁优化---抽取
- [摘录]代码优化规则
- C编译器剖析_5.2.2 中间代码生成及优化_再论符号symbol与公共子表达式
- [置顶] spring boot项目实战之公共代码抽取
- javaEE SSH框架 BaseAction的抽取以及其他方面代码优化
- [置顶] spring boot项目实战之公共代码抽取
- 代码优化规则
- 代码优化规则
- [置顶] spring boot项目实战之公共代码抽取
- 型材优化截取初步代码