1、Extract Method(提炼函数)
重构前:
void printOwing(double amount){ printBanner(); //print details System.out.println("name:" + _name); System.out.println("amount" + amount); }
重构后:
void printOwing(double amount){ printBanner(); printDetails(amount); } void printDetails(double amount){ System.out.println("name:" + _name); System.out.println("amount" + amount); }
2、Inline Method(内联函数)
重构前:
int getRating(){ return (moreThanFiveLateDeliveries()) ? 2 : 1; } boolean moreThanFiveLateDeliveries(){ return _numberOfLateDeliveries > 5; }
重构后
int getRating(){ return (_numberOfLateDeliveries > 5) ? 2 : 1; }
3、Inline Temp(内联临时变量)
重构前:
double basePrice = anOrder.basePrice(); return (basePrice > 1000);
重构后:
return (anOrder.basePrice() > 1000);
4、Replace Temp with Query(以查询取代临时变量)
重构前:
double basePrice = _quantity * _itemPrice; if(basePrice > 1000) return basePrice * 0.95; else return basePrice * 0.98;
重构后:
if(basePrice() > 1000) return basePrice() * 0.95; else return basePrice() * 0.98; double basePrice(){ return _quantity * _itemPrice; }
5、Introduce Explaining Variable(引入解释性变量)
重构前:
if((platform.toUpperCase().indexOf("MAC") > -1) && (browser.toUpperCase().indexOf("IE") > -1) && wasInitialized() && resize > 0) { //do something }
重构后:
final boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1; final boolean isIEBrowser = browser.toUpperCase().indexOf("IE) > -1; final boolean wasResized = resize > 0; if(isMacOs && isIEBrowser && wasInitialized() && wasResized){ //do something }
6、Split Temporary Variable(分解临时变量)
重构前:
double temp = 2 * (_height + _width); System.out.println(temp); temp = _height * _width; System.out.println(temp);
重构后:
final double perimeter = 2 * (_height + _width); System.out.println(perimeter); final double area = _height * _width; System.out.println(area);
7、Remove Assignments to Parameters(移除对参数的赋值)
重构前:
int discount(int inputVal, int quantity, int yearToDate){ if(inputVal > 50) inputVal -= 2; }
重构后:
int discount(int inputVal, int quantity, int yearToDate){ int result = inputVal; if(inputVal > 50) result -= 2; }
8、Replace Method with Method Object(以函数对象取代函数)
9、Substitute Algorithm(替换算法)
重构前:
String foundPerson(String[] people){ for(int i = 0; i < people.length; i++){ if(people[i].equals("Don")){ return "Don"; } if(people[i].equals("John")){ return "John"; } if(people[i].equals("Kent")){ return "Kent"; } } return ""; }
重构后:
String foundPerson(String[] people){ List candidates = Arrays.asList(new String[] {"Don", "John", "Kent"}); for(int i = 0; i < people.length; i++){ if(candidates.contains(people[i])) return people[i]; } return ""; }