读书人

Java复建示例五(转载)

发布时间: 2012-12-22 12:05:06 作者: rapoo

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

读书人网 >编程

热点推荐