Java重构示例三(转载)
关键字:Java?程序设计?重构?示例?原则?优化?技巧?方法
序言
本文通过Java示例代码片段展示了常用重构原则和技巧,供初级开发人员参考。精致的代码能够清楚传达作者的意图,精致的代码是最好的注释,精致的代码非常容易维护和扩展。程序员阅读精致的代码如同大众欣赏优美的散文一样享受。
11?使方法通用化 11.1?重构前?
public?DayPart[]?sortDayPart()?{
??if?(dayParts?==?null?||?dayParts.length?==?0)?{
????return?dayParts;
??}
??List<DayPart>?dayPartList?=?Arrays.asList(dayParts);
?
??Collections.sort(dayPartList,?new?Comparator<DayPart>()?{
????public?int?compare(DayPart?o1,?DayPart?o2)?{
??????if?(o1.getIndex()?<?o2.getIndex())?{
????????return?-1;
??????}?else?if?(o1.getIndex()?>?o2.getIndex())?{
????????return?1;
??????}?else?{
????????return?0;
??????}
????}
??});
?
??return?dayPartList.toArray(new?DayPart[dayPartList.size()]);
}
?
11.2?重构后?
public?DayPart[]?sortDayPart()?{
??return?this.sortDayPart(SortMode.ASC);
}
?
public?DayPart[]?sortDayPart(final?SortMode?sortMode)?{
??if?(dayParts?==?null?||?dayParts.length?==?0)?{
????return?dayParts;
??}
??List<DayPart>?dayPartList?=?Arrays.asList(dayParts);
?
??Collections.sort(dayPartList,?new?Comparator<DayPart>()?{
????public?int?compare(DayPart?o1,?DayPart?o2)?{
??????if?(o1.getIndex()?<?o2.getIndex())?{
????????return?sortMode.isAsc()???-1?:?1;
??????}?else?if?(o1.getIndex()?>?o2.getIndex())?{
????????return?sortMode.isAsc()???1?:?-1;
??????}?else?{
????????return?0;
??????}
????}
??});
?
??return?dayPartList.toArray(new?DayPart[dayPartList.size()]);
}
?
12?避免空语句 12.1?重构前?
public?int?getRemainMinutes(int?hour,?int?minute)?{
??int?startHour?=?fromHour;
??int?startMinute?=?fromMinute;
??if?(this.fromAfterEqual(hour,?minute))?{
????//?------from-------position------to--------
????;//use?default?init?value
??}?else?if?(this.toAfterEqual(hour,?minute))?{
????//?------from-------position------to--------
????startHour?=?hour;
????startMinute?=?minute;
??}?else?{
????//?--------from-------to--------position-------
????startHour?=?toHour;
????startMinute?=?toMinute;
??}
?
??return?this.getMinutes(startHour,?startMinute,?toHour,?toMinute);
}
?
12.2?重构后?
public?int?getRemainMinutes(int?hour,?int?minute)?{
??//?--------from-------to--------position-------
??int?startHour?=?toHour;
??int?startMinute?=?toMinute;
?
??if?(this.fromAfterEqual(hour,?minute))?{
????//?------position------from-------to--------
????startHour?=?fromHour;
????startMinute?=?fromMinute;
??}?else?if?(this.toAfterEqual(hour,?minute))?{
????//?------from-------position------to--------
????startHour?=?hour;
????startMinute?=?minute;
??}
?
??return?this.getMinutes(startHour,?startMinute,?toHour,?toMinute);
}
?
13?公共逻辑后置 13.1?重构前?
public?int?getRemainMinutes(int?hour,?int?minute)?{
??if?(this.fromAfterEqual(hour,?minute))?{
????//?------position------from-------to--------
????return?(toHour?*?60?+?toMinute)?-?(fromHour?*?60?+?fromMinute);
??}?else?if?(this.toAfterEqual(hour,?minute))?{
????//?------from-------position------to--------
????return?(toHour?*?60?+?toMinute)?-?(hour?*?60?+?minute);
??}
??else?{
????//?--------from-------to--------position-------
????return?0;?//(toHour?*?60?+?toMinute)?-?(toHour?*?60?+?toMinute);
??}
}
?
13.2?重构后?
private?int?getMinutes(int?startHour,?int?startMinute,?int?endHour,
int?endMinute)?{
??int?minutes?=?0;
??minutes?=?(endHour?*?60?+?endMinute)?-?(startHour?*?60?+?startMinute);
?
??return?minutes;
}
?
public?int?getRemainMinutes(int?hour,?int?minute)?{
??//?--------from-------to--------position-------
??int?startHour?=?toHour;
??int?startMinute?=?toMinute;
?
??if?(this.fromAfterEqual(hour,?minute))?{
????//?------position------from-------to--------
????startHour?=?fromHour;
????startMinute?=?fromMinute;
??}?else?if?(this.toAfterEqual(hour,?minute))?{
????//?------from-------position------to--------
????startHour?=?hour;
????startMinute?=?minute;
??}
?
??return?this.getMinutes(startHour,?startMinute,?toHour,?toMinute);
}
?
14?公共逻辑前置 14.1?重构前?
private?StringBuffer?transformDialect(String?intPart,?String?fracPart)?{
??StringBuffer?cn?=?new?StringBuffer();
?
??if?(isIntegerZero(intPart))?{
????return?cn;
??}
?
??if?(this.isFractionZero(fracPart))?{
//?无小数,增加附加信息(整)
????cn.append("元").append("整");
??}?else?{
//?有小数,增加附加信息(零)
????cn.append("元").append("零");
??}
?
??return?cn;
}
?
14.2?重构后?
private?StringBuffer?transformDialect(String?intPart,?String?fracPart)?{
??StringBuffer?cn?=?new?StringBuffer();
?
??if?(isIntegerZero(intPart))?{
????return?cn;
??}
?
??cn.append("元");
??if?(this.isFractionZero(fracPart))?{
//?无小数,增加附加信息(整)
????cn.append("整");
??}?else?{
//?有小数,增加附加信息(零)
????cn.append("零");
??}
?
??return?cn;
}
?
15?使用清晰的布尔型变量替换逻辑表达式 15.1?重构前?
public?boolean?tailGreatHead(int?headHour,?int?headMinute,?int?tailHour,
int?tailMinute,?boolean?includeEqual)?{
?
??return?((headHour?<?tailHour)?||
?((headHour?==?tailHour)?&&
???????????((headMinute?<?tailMinute)?||?includeEqual?&&?(headMinute?==?tailMinute))));
}
?
?
15.2?重构后?
public?boolean?tailGreatHead(int?headHour,?int?headMinute,?int?tailHour,
int?tailMinute,?boolean?includeEqual)?{
??boolean?tailGreatHeadHour?=?(headHour?<?tailHour);
??boolean?tailEqualHeadHour?=?(headHour?==?tailHour);
??boolean?tailGreatHeadMinute?=?(headMinute?<?tailMinute);
??boolean?tailEqualHeadMinute?=?(headMinute?==?tailMinute);
?
??boolean?tailGreatEqualHeadMinute?=?tailGreatHeadMinute?||?includeEqual
&&?tailEqualHeadMinute;
?
??return?(tailGreatHeadHour?||?(tailEqualHeadHour?&&?tailGreatEqualHeadMinute));
}
?
?
<!--EndFragment-->
?
源地址:http://passport.baidu.com/?business&aid=6&un=%B2%DC%CB%C9%C7%E0#7