满足循环就跳出
重构前
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;
}
}