今天就先來分享 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.
如下圖所示
沒有留言:
張貼留言