Java重构示例五(转载)
?
关键字:Java?程序设计?重构?示例?技巧?原则?优化?方法
序言
本文通过Java示例代码片段展示了常用重构原则和技巧,供初级开发人员参考。精致的代码能够清楚传达作者的意图,精致的代码是最好的注释,精致的代码非常容易维护和扩展。程序员阅读精致的代码如同大众欣赏优美的散文一样享受。
21?使用类替换类型代码 21.1?重构前?
public?class?LabelComparator?implements?Comparator,?Serializable?{
?
??private?static?final?long?serialVersionUID?=?1L;
?
??public?static?final?int?ASC?=?1;
??public?static?final?int?DESC?=?2;
?
??private?int?sortType?=?ASC;
?
??public?LabelComparator()?{
??}
?
??public?LabelComparator(int?sortType)?{
????this.sortType?=?sortType;
??}
?
??public?int?compare(Object?o1,?Object?o2)?{
????if?(o1?==?null?&&?o2?==?null)?{
??????return?0;
????}
????if?(o1?==?null)?{
??????return?-1;
????}
????if?(o2?==?null)?{
??????return?-1;
????}
?
????if?(((Label)?o1).getIndex()?<?((Label)?o2).getIndex())?{
??????return?(sortType?==?ASC)???-1?:?1;
????}?else?if?(((Label)?o1).getIndex()?>?((Label)?o2).getIndex())?{
??????return?(sortType?==?ASC)????1?:?-1;
????}?else?{
??????return?0;
????}
??}
}
?
21.2?重构后?
public?final?class?SortMode?implements?Serializable?{
?
??private?static?final?long?serialVersionUID?=?1L;
?
??private?static?final?Map<String,?SortMode>?INSTANCES?=?new?HashMap<String,?SortMode>();
?
??private?final?int?type;
??private?final?String?name;
?
??private?SortMode(int?type,?String?name)?{
????this.type?=?type;
????this.name?=?name;
??}
?
??public?String?toString()?{
????return?name;
??}
?
??public?static?final?SortMode?ASC?=?new?SortMode(1,?"ASC");
?
??public?static?final?SortMode?DESC?=?new?SortMode(2,?"DESC");
?
??static?{
????INSTANCES.put(ASC.name,?ASC);
????INSTANCES.put(DESC.name,?DESC);
??}
?
??public?boolean?isAsc()?{
????return?ASC.type?==?this.type;
??}
?
??public?boolean?isDesc()?{
????return?DESC.type?==?this.type;
??}
?
??private?Object?readResolve()?{
????return?INSTANCES.get(name);
??}
?
??public?static?SortMode?parse(String?name)?{
????return?(SortMode)?INSTANCES.get(name);
??}
?
??public?boolean?equals(Object?obj)?{
????if?(obj?instanceof?SortMode)?{
??????SortMode?that?=?(SortMode)?obj;
????????if?(that.type?==?this.type)?{
??????????return?true;
????????}
????????return?false;
????}?else?{
??????return?false;
????}
??}
}
?
public?class?LabelComparator?implements?Comparator,?Serializable?{
?
??private?static?final?long?serialVersionUID?=?1L;
??public?SortMode?mode?=?SortMode.ASC;
?
??public?LabelComparator()?{
??}
?
??public?LabelComparator(SortMode?mode)?{
????this.mode?=?mode;
??}
?
??public?int?compare(Object?o1,?Object?o2)?{
????if?(o1?==?null?&&?o2?==?null)?{
??????return?0;
????}
????if?(o1?==?null)?{
??????return?-1;
????}
????if?(o2?==?null)?{
??????return?-1;
????}
?
????if?(((Label)?o1).getIndex()?<?((Label)?o2).getIndex())?{
??????return?mode.isAsc()???-1?:?1;
????}?else?if?(((Label)?o1).getIndex()?>?((Label)?o2).getIndex())?{
??????return?mode.isAsc()???1?:?-1;
????}?else?{
??????return?0;
????}
??}
}
22?使用对象封装参数 22.1?重构前?
public?int?getRemainMinutes(int?hour,?int?minute,?
?????????????????????????int?fromHour,?int?fromMinute
?????????????????????????int?toHour,?int?toMinute)?{
??//?--------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);
}
?
22.2?重构后?
?
public?class?DayPart?implements?Serializable?{
?
??int?fromHour?=?-1;
??int?fromMinute?=?-1;
??int?toHour?=?-1;
??int?toMinute?=?-1;
?
??public?int?getFromHour()?{
????return?fromHour;
??}
?
??public?void?setFromHour(int?fromHour)?{
????this.fromHour?=?fromHour;
??}
?
??public?int?getFromMinute()?{
????return?fromMinute;
??}
?
??public?void?setFromMinute(int?fromMinute)?{
????this.fromMinute?=?fromMinute;
??}
?
??public?int?getToHour()?{
????return?toHour;
??}
?
??public?void?setToHour(int?toHour)?{
????this.toHour?=?toHour;
??}
?
??public?int?getToMinute()?{
????return?toMinute;
??}
?
??public?void?setToMinute(int?toMinute)?{
????this.toMinute?=?toMinute;
??}
}
?
public?int?getRemainMinutes(int?hour,?int?minute,?DatePart?datePart)?{
??int?fromHour?=?datePart.getFromHour();
??int?fromMinute?=?datePart.getFromMinute();
??int?toHour?=?datePart.getToHour();
??int?toMinute?=?datePart.getToMinute();
?
??//?--------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);
}
?
23?封装集合操作 23.1?重构前?
public?Class?Group{
?
??private?List<User>?userList?=?new?ArrayList<User>();
?
??public?void?setUserList(List<User>?userList){
????this.userList?=?userList;
??}
?
??public?List<User>?getUserList(){
????return?this.userList;
??}
}
?
23.2?重构后?
public?Class?Group{
?
??private?List<User>?userList?=?new?ArrayList<User>();
?
??public?void?setUserList(List<User>?userList){
????this.userList?=?userList;
??}
?
??public?List<User>?getUserList(){
????return?this.userList;
??}
?
??public?void?addUser(User?user){
????this.getUserList().add(user);
????user.setGroup(this);
??}
?
??public?void?removeUser(User?user){
????this.getUserList().remove(user);
????user.setGroup(null);
??}
}
?
24?避免一次性临时变量 24.1?重构前?
public?int?countWeekDay(Month?month,?WeekDay?weekDay)?{
??int?count?=?0;
??int[][]?weeks?=?this.getDates()[month.getMonth()];
????for?(int?week?=?0,?weekLen?=?weeks.length;?week?<?weekLen;?week++)?{
??????int?date?=?weeks[week][weekDay.getDay()];
??????if?(date?>?0)?{
????????count++;
??????}
????}
?
??return?count;
}
?
24.2?重构后?
public?int?countWeekDay(Month?month,?WeekDay?weekDay)?{
??int?count?=?0;
??int[][]?weeks?=?this.getDates()[month.getMonth()];<spa
?
?
源地址:http://passport.baidu.com/?business&aid=6&un=%B2%DC%CB%C9%C7%E0#7