代碼重構
阿新 • • 發佈:2018-07-02
彈框 turn static sta date() ons foo 校驗 string
1.重構
(1)重構變量
- Shift+F6 批量重命名變量(Rename)
-
private String bcd;//光標在bcd處,按Shift+F6,改為lastname
public String getFullName(String abc){//光標在abc處,按Shift+F6,改為firstname
System.out.println("your firstname: "+abc);
System.out.println("your lastname: "+this.bcd);
String fullName=abc+this.bcd;
System.out.println("your fullname: "+fullName);
this.sayHello(abc);
return fullName;
} - 這段代碼abc,bcd含義不明,將abc重構為firstname,bcd重構為lastname,提高代碼可讀性,改為如下
-
private String lastname;
public String getFullName(String firstname){
System.out.println("your firstname: "+firstname);
System.out.println("your lastname: "+this.lastname);
String fullName=firstname+this.lastname;
System.out.println("your fullname: "+fullName);
this.sayHello(firstname);
return fullName;
}
(2)重構方法
- 方法一: Ctrl+F6 改變方法 (change signature)
-
public String getFullName(String firstname){
//
this.sayHello(firstname);//2.此處出現紅波浪,手動添加,lastname
//
}
private void sayHello(String firstname) {//1.在此處按Ctrl+F6 ,即出現一個彈框,在裏面點+,輸入String lastname即可
} - 方法二:Ctrl+Alter自動修改
-
public String getFullName(String firstname){
//
this.sayHello(firstname);//1.此處添加,lastname,按下Alt+Enter,選擇Add String as 2nd parameter to method sayHello
//
}
private void sayHello(String firstname) {//2.此處自動變為private void sayHello(String firstname, String lastname)
}
2.抽取
(1)抽取變量
- Ctrl+Alt+v 抽取變量(extract variable),v就相當於variable
-
public void foo(){
getFullname("san");//光標放在san上,Ctrl+Alt+v, replace all 6 occurrebces
getFullname("san");
getFullname("san");
getFullname("san");
getFullname("san");
getFullname("san");
} - 代碼多次需要用到“san”變量,我們可以把它抽取出來,變為
-
public void foo(){
String lastname = "san";
getFullname(lastname);
getFullname(lastname);
getFullname(lastname);
getFullname(lastname);
getFullname(lastname);
getFullname(lastname);
}
(2)抽取靜態變量
- Ctrl+Alt+c 抽取靜態變量(extract constant),c就相當於constant
-
public void foo(){
getFullname("san");//光標放在san上,Ctrl+Alt+c, replace all 6 occurrebces
getFullname("san");
getFullname("san");
getFullname("san");
getFullname("san");
getFullname("san");
} - 代碼多次需要用到“san”作為靜態變量,我們可以把它抽取出來,變為
-
public static final String LASTNAME = "san";
public void foo(){
getFullname(LASTNAME);
getFullname(LASTNAME);
getFullname(LASTNAME);
getFullname(LASTNAME);
getFullname(LASTNAME);
getFullname(LASTNAME);
}
(3)抽取成員變量
- Ctrl+Alt+f 抽取成員變量(extract field),f就相當於field
-
public void foo(){
getFullname("san");//光標放在san上,Ctrl+Alt+f, replace all 6 occurrebces
getFullname("san");
getFullname("san");
getFullname("san");
getFullname("san");
getFullname("san");
} - 代碼多次需要用到“san”作為靜態變量,我們可以把它抽取出來,變為
-
private String lastname;
public void foo(){
lastname = "san";
getFullname(lastname);
getFullname(lastname);
getFullname(lastname);
getFullname(lastname);
getFullname(lastname);
getFullname(lastname);
}
(4)抽取方法參數
- Ctrl+Alt+p 抽取方法參數(extract parameter),p就相當於parameter
-
private String firstName;
private String getFullname(String lastName) {
String fullName= this.firstName +","+lastName;//光標放在firstName,Ctrl+Alt+p
return fullName;
}
public void foo(){
getFullname("san");
} - 將firstName它抽取出來,就可以將getFullname()抽取出來成為一個服務,放到別的類裏面都可以,變為
-
private String firstName;
private String getFullname(String lastName, String firstName) {
String fullName= firstName +","+lastName;
return fullName;
}
public void foo(){
getFullname("san", this.firstName);
}
(5)抽取函數
- Ctrl+Alt+m 抽取函數(extract method),m就相當於method
-
public void foo(){
step1();
step2();//選中他倆,按Ctrl+Alt+m,在彈框中輸入validate
step3();
step4();//選中他倆,按Ctrl+Alt+m,在彈框中輸入loadDataFromDBstep5();
step6();//選中他倆,按Ctrl+Alt+m,在彈框中輸入calc}
-
public void foo(){
validate();//校驗參數
loadDataFromDB();//數據庫加載數據
calc();//邏輯運算
}
private void calc() {
step5();
step6();
}
private void loadDataFromDB() {
step3();
step4();
}
private void validate() {
step1();
step2();
}
代碼重構