Java编程思想(03)——重构让代码更简洁(三)

满足循环就跳出

重构前

public boolean contain(int year, Month month, int day) {
  boolean found = false;
  for (IPolyDate date : dateList) {
    if (date.same(year, month.getMonth(), day)) {
      found = true;
      break;
    }
  }

  return found;
}

重构后

public boolean contain(int year, Month month, int day) {
  for (IPolyDate date : dateList) {
    if (date.same(year, month.getMonth(), day)) {
      return true;
    }
  }

  return false;
}


分离公共逻辑

重构前

public void testGetIntPart() throws Exception {
  assertEquals("0", digitTransform.getIntPart("0.01");
  assertEquals("1", digitTransform.getIntPart("1.2");
  assertEquals("1234", digitTransform.getIntPart("1234");
  assertEquals("1", digitTransform.getIntPart("1.01");
  assertEquals("0", digitTransform.getIntPart("0.01");
  assertEquals("11111", digitTransform.getIntPart("11111");
  assertEquals("1000", digitTransform.getIntPart("1000.11");
}

重构后

public void testGetIntPart() throws Exception {
String[][] cases = new String[][] { { "0.01", "0" }, { "1.2", "1" },
				{ "1234", "1234" }, { "1.01", "1" }, { "0", "0" },
				{ "11111", "11111" }, { "1000.11", "1000" } };

for (int i = 0, len = cases.length; i < len; i++) {
assertEquals(cases[i][1], digitTransform.getIntPart(cases[i][0]));
}
}

分离变化参数

重构前

public class ExceedMaxWeekIndexOfMonthException extends
		IndexOutOfBoundsException {

  private static final long serialVersionUID = 1L;

  public ExceedMaxWeekIndexOfMonthException(String message) {
    super(message);
  }

}

重构后

public class ExceedMaxWeekIndexOfMonthException extends
		IndexOutOfBoundsException {

  private static final long serialVersionUID = 1L;

  public ExceedMaxWeekIndexOfMonthException(int index, int maxCountOfWeekDay,
			Month month) {
    super(formatMessage(index, maxCountOfWeekDay, month));
  }

  private static String formatMessage(int index, int maxCountOfWeekDay,
			Month month) {
    return "Arguement index[" + index + "] exceeds max week index["
				+ maxCountOfWeekDay + "] of month[" + month.toString() + "].";
  }

}


抽取公共逻辑

重构前

public int getYear() {
  Calendar date = this.getCalendarDate();

  return date.get(Calendar.YEAR);
}

public int getMonth() {
  Calendar date = this.getCalendarDate();

  return date.get(Calendar.MONTH);
}

public int getDay() {
  Calendar date = this.getCalendarDate();

  return date.get(Calendar.DAY_OF_MONTH);
}

public int getHour() {
  Calendar date = this.getCalendarDate();

  return date.get(Calendar.HOUR_OF_DAY);
}

public int getMinute() {
  Calendar date = this.getCalendarDate();

  return date.get(Calendar.MINUTE);
}

public int getSecond() {
  Calendar date = this.getCalendarDate();

  return date.get(Calendar.SECOND);
}

public int getMillisSecond() {
  Calendar date = this.getCalendarDate();

  return date.get(Calendar.MILLISECOND);
  }


重构后

private int get(int field) {
    Calendar date = this.getCalendarDate();

    return date.get(field);
  }

  public int getYear() {
    return this.get(Calendar.YEAR);
  }

  public int getMonth() {
    return this.get(Calendar.MONTH);
  }

  public int getDay() {
    return this.get(Calendar.DAY_OF_MONTH);
  }

  public int getHour() {
    return this.get(Calendar.HOUR_OF_DAY);
  }

  public int getMinute() {
    return this.get(Calendar.MINUTE);
  }

  public int getSecond() {
    return this.get(Calendar.SECOND);
  }

  public int getMillisSecond() {
    return this.get(Calendar.MILLISECOND);
  }

使用已有的API

重构前

protected String[] getConfigLocations() {
    String[] baseCfgs = this.getBaseCfgs();
    String[] extra = this.getExtraCfgs();
    if (extra != null && extra.length > 0) {
      int baseCfgLen = baseCfgs.length;
      int extraLen = extra.length;
      String[] cfgLocations = new String[baseCfgLen + extraLen];
      for(int i = 0; i < baseCfgLen; i++){
        cfgLocations[i] = baseCfgs[i];
      }

      for(int i = 0; i < extraLen; i++){
        cfgLocations[baseCfgLen + i] = extra[i];
      }
     
      return cfgLocations;
    } else {
      return baseCfgs;
    }
 }

重构后

protected String[] getConfigLocations() {
    String[] baseCfgs = this.getBaseCfgs();
    String[] extra = this.getExtraCfgs();
if (extra != null && extra.length > 0) {
      int baseCfgLen = baseCfgs.length;
      int extraLen = extra.length;
      String[] cfgLocations = new String[baseCfgLen + extraLen;
      System.arraycopy(baseCfgs, 0, cfgLocations, 0, baseCfgLen);
      System.arraycopy(extra, 0, cfgLocations, baseCfgLen,
					extraLen;
     
      return cfgLocations;
    } else {
      return baseCfgs;
    }
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值