Before
package com.lohamce.refactor;
import java.util.List;
public class ExtractMethod {
private String name;
private List<Order> orders;
void printOwing(double previousAmount) {
List<Order> myOrder = orders;
double outstanding = previousAmount * 1.2;
// Print Banner
System.out.println("**************************");
System.out.println("****Customer Owes*********");
System.out.println("**************************");
for (Order order : myOrder) {
outstanding += order.getAmount();
}
// print details
System.out.print("name:"+name);
System.out.print("amount:"+outstanding);
}
}
class Order {
private double amount;
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
}
After
package com.lohamce.refactor;
import java.util.List;
public class ExtractMethod2 {
private String name;
private List<Order> orders;
void printOwing(double previousAmount) {
printBanner();
// 因为outstanding被改变了, 所以需要定义一个变量以后使用
double outstanding = getOutstanding(previousAmount * 1.2);
printDetails(outstanding);
}
// 不改变原始值, 返回一个结果值
private double getOutstanding(double initialValue) {
double result = initialValue;
for (Order order : orders) {
result += order.getAmount();
}
return result;
}
private void printDetails(double outstanding) {
System.out.print("name:"+name);
System.out.print("amount:"+outstanding);
}
private void printBanner(){
System.out.println("**************************");
System.out.println("****Customer Owes*********");
System.out.println("**************************");
}
}