1.方法抽取:Extract Method
將calcCost中參數校驗部分抽取成方法verify.
選定代碼--->右鍵Refactor-->Extract Method
2.重命名:Rename
(1)重命名類名Test1為CostCalculator
(2)重命名User為UserInfo
選定類名-->右鍵Refactor-->Rename
3.內聯:Inlining
內聯方法add
內聯原因:調用方法越多,運行速度越慢
選定方法名("add")-->右鍵Refactor-->Inline
4.常量抽取:Extract Constant
原因:避免手誤
將"normal","vip"抽取成常量
選定字符串-->右鍵Refactor-->Extract Constant
5.抽取局部變量:Extract Local Voriable
將user,userType抽取成變量
原因:減少代碼長度,增加代碼可讀性
選定要抽取的變量(user.userName)-->右鍵Refactor-->Extract Local Variable
6.包裝字段:Encapsulate Field
重構user類,用set,get包裝
主菜單-->Refactor-->Encapsulate Field
7.抽取接口:Extract Interface
選定方法名(calcCost)-->右鍵Refactor-->Extract Interface-->Name:ICcstCalculator
重構后的代碼為:
(一)UserInfo.java
package com.comnew.demo;
public class UserInfo {
private String userName;
private String userType;
private int amount;
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setUserType(String userType) {
this.userType = userType;
}
public String getUserType() {
return userType;
}
public void setAmount(int amount) {
this.amount = amount;
}
public int getAmount() {
return amount;
}
}
(二)CostCalculator.java
package com.comnew.demo;
public class CostCalculator implements ICostCalculator {
private static final int VIPPRICE = 0;
private static final int NORMALPRICE = 10;
private static final String VIP = "vip";
private static final String NORMAL = "normal";
/* (non-Javadoc)
* @see com.comnew.demo.ICostCalculator#calcCost(com.comnew.demo.UserInfo)
*/
public int calcCost(UserInfo user)
{
verify(user);
int ret=0;
String userType = user.getUserType();
if(userType.equals(NORMAL))
{
ret=user.getAmount()+NORMALPRICE;
}
else if(userType.equals(VIP))
{
ret=user.getAmount()+VIPPRICE;
}
else
{
throw new IllegalArgumentException("useType的類型錯誤!必須未如下幾種:"+NORMAL+","+VIP);
}
return ret;
}
private void verify(UserInfo user) {
String useType = user.getUserType();
if(useType==null)
{
throw new IllegalArgumentException("userType不能為空!");
}
if(user.getAmount()<=0)
{
throw new IllegalArgumentException("amount必須大于0!");
}
}
public static void main(String[] args)
{
String userName="tom";
String userType=NORMAL;
int amount=20;
UserInfo user=new UserInfo();
user.setUserName(userName);
user.setUserType(userType);
user.setAmount(amount);
System.out.println(new CostCalculator().calcCost(user));
}
}
(三)ICostCalculator.java
package com.comnew.demo;
public interface ICostCalculator {
public abstract int calcCost(UserInfo user);
}