zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Function to use in Queries, Filters
    Dynamics AX 2012
    Job to Import Vendor/Customer Postal Address in Dynamics Ax2012
    To Find or Update customer primary Address in Ax 2012
    Importing Customers, Vendors and Products in AX 2012
    CobaltStrike安装教程
    kali安装dnsdict6
    查看windows端口被占用
    使用reGeorg打穿HTTP隧道代理
    windows建立隐藏用户
  • 原文地址:https://www.cnblogs.com/ys99/p/14203867.html
Copyright © 2011-2022 走看看