2014年10月2日 星期四

[RefactoringToPatterns] Replace Constructors with Creation Methods

最近開始看 RefactoringToPatterns 最近應該會開始分享這本書的一些心得,
 今天就先來分享 Replace Constructors with Creation Methods吧
 作者在一開始就列出了兩個範例



哪個看起來比較能清楚表達我們要創建什麼物件?

我相信大家都會選擇下方的選項,
Replace Constructors with Creation Methods的意思就是

        以目的清楚, 返回物件實體的Creation Method 取代建構式

然而使用這個方法雖然能夠讓我們清楚了解要創建什麼物件,相對的他也帶來了部分的缺點

優點:
  • 比建構式更能表達要創建哪種物件
  • 突破建構式的限制,不能同時擁有兩個  引數個數和引數型別君相同的建構式
  • 更容易找出未使用的創建式
缺點:

  • 創建的方式變得不標準,以上面loan的例子來說:我們可以用new Loan(...)
    也可以用  Loan.createTermLoad(...)


至於該如何實做,這邊附上一個很小的範例


public class Loan {

    public Loan(int a, int b) {

    }

}

原本的建構式是長這個樣子,經過refactoring 之後


public class Loan {
    
    private Loan(int a,int b){
        
    }
    
    public static Loan createTermLoan(int a,int b){
        return new Loan(a,b);
    }
}

可以很清楚地看到,我們使用了static method來創建我們的Loan
這樣之後要創建Loan時我們只需要call Loan.createTermLoan即可

最後,作者也有提到,當我們的物件裡含有太多的creation method,
而這些method開始混淆這個class原本該做的事情時,根據單一責任原則,
我們可以將Creation method 再度重構為Factory.
如下圖所示


沒有留言:

張貼留言