所以,總結一下。
這種模式被稱爲靜態工廠方法並且它例如描述如下:How to use "Static factory methods" instead of constructors?
在最簡單的形式,它看起來是這樣的:
class A {
public static A newA() {
return new A();
}
private A(){}
}
你的例子是有點更復雜,因爲它包括計算參數調用構造函數
public class A {
private A(int param1, String param2) {}
public static A createFromCursor(Cursor c) {
// calculate param1 and param2 from cursor
return new A(param1, param2);
}
}
我們的目的用這種方式創建新對象可能需要重複這些計算,每次直接調用new A(params)
之前。所以這只是避免重複自己,最簡單的方法是創建一個方法。
此外使用相同的方式,您可以提供更多的選項來創建new A
。例如,你可以改變你的計算與運作方式:
public static A createFromCursorDifferently(Cursor c) {
// calculate param1 and param2 from cursor in different way
return new A(param1, param2);
}
然後你可以在同一個參數傳遞給這個方法,結果會有所不同(堂妹的方法名稱不同)。
當然,你可以從任何其他參數創建new A
,使用相同的構造函數之前:
public static A createFromObject(Object o) {
// calculate param1 and param2 from object
return new A(param1, param2);
}
所以,你必須與靜態工廠方法更多的可能性比構造簡單的使用只。
可能重複[靜態工廠方法的構造函數](http://stackoverflow.com/questions/4029622/static-factory-method-for-constructors) –
由於這是無效的Java,似乎沒有考慮到它是一種設計模式。 – Dancrumb
@Dancrumb這裏什麼是無效的? – dantuch