您的位置:首页 > 其它

重构手法(一)之重新组织函数

2016-01-27 13:20 549 查看
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 "";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: