2. 移动方法

资料参考:https://blog.csdn.net/knightswarrior/article/details/9447815

概念:本文所讲的移动方法就是方法放在合适的位置(通常指放在合适的类中)。

正文:移动方法是一个很简单也很常见的重构,只要是系统就会存在很多类,那么类里面包括很多方法,如果一个方法经常被另外一个类使用(比本身的类使用还多)或者这个方法本身就不应该放在这个类里面,那么这个适合应该考虑把它移到合适的类中。代码如下:

 1 /**
 2  * 银行账户
 3  */
 4 class BankAccount {
 5     private final int accountAge;
 6 
 7     private final int creditScore;
 8 
 9     public BankAccount(int accountAge, int creditScore) {
10         this.accountAge = accountAge;
11         this.creditScore = creditScore;
12     }
13 
14     /**
15      * 计算利率
16      *
17      * @return 利率
18      */
19     public double calculateInterestRate() {
20         if (creditScore > 800) {
21             return 0.02;
22         }
23 
24         if (accountAge > 10) {
25             return 0.03;
26         }
27 
28         return 0.05;
29     }
30 }
 1 /**
 2  * 账户利息
 3  */
 4 class AccountInterest {
 5     private BankAccount bankAccount;
 6 
 7     public AccountInterest(BankAccount bankAccount) {
 8         this.bankAccount = bankAccount;
 9     }
10 
11     /**
12      * 获取利率
13      *
14      * @return 利率
15      */
16     public double interestRate() {
17         return bankAccount.calculateInterestRate();
18     }
19 
20     /**
21      * 是否是优惠的利率
22      *
23      * @return true:是;false:否
24      */
25     public boolean introductoryRate() {
26         return bankAccount.calculateInterestRate() < 0.05;
27     }
28 }

移动以后大家可以看到BankAccount类的职责也单一,同时CalculateInterestRate也放到了经常使用且适合它的类中了,所以此重构是一个比较好的重构,能让整个代码变得更加合理。

 1 /**
 2  * 银行账户
 3  */
 4 class BankAccount {
 5     private final int accountAge;
 6 
 7     private final int creditScore;
 8 
 9     public BankAccount(int accountAge, int creditScore) {
10         this.accountAge = accountAge;
11         this.creditScore = creditScore;
12     }
13 
14     /**
15      * 获取账户年数
16      * 
17      * @return 账户年数
18      */
19     public int getAccountAge() {
20         return accountAge;
21     }
22 
23     /**
24      * 获取信用分数
25      * 
26      * @return 信用分数
27      */
28     public int getCreditScore() {
29         return creditScore;
30     }
31 }
 1 /**
 2  * 账户利息
 3  */
 4 class AccountInterest {
 5     private final BankAccount bankAccount;
 6 
 7     public AccountInterest(BankAccount bankAccount) {
 8         this.bankAccount = bankAccount;
 9     }
10 
11     /**
12      * 获取利率
13      *
14      * @return 利率
15      */
16     public double interestRate() {
17         return calculateInterestRate();
18     }
19 
20     /**
21      * 是否是优惠的利率
22      *
23      * @return true:是;false:否
24      */
25     public boolean introductoryRate() {
26         return calculateInterestRate() < 0.05;
27     }
28 
29     private double calculateInterestRate() {
30         if (bankAccount.getCreditScore() > 800) {
31             return 0.02;
32         }
33 
34         if (bankAccount.getAccountAge() > 10) {
35             return 0.03;
36         }
37 
38         return 0.05;
39     }
40 }

 

posted @ 2020-12-28 21:55  ysyouaremyall  阅读(147)  评论(0编辑  收藏  举报