一般客戶端訪問類實例的方式是使用一個public的構造函數。但是也可以使用一個public的static factory method,它只是一個返回類實例的簡單靜態方法。注意static factory method不同于設計模式中的Factory Method。static factory method的例子如Boolean類中下面代碼:
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
可以用static factory method代替構造函數,也可以同時使用兩者。用static factory method代替構造函數的好處是:
1.不同于構造函數,靜態工廠方法可以靈活命名。
2.不同于構造函數,靜態工廠方法不需要每次在調用的時候創建一個新對象。
3.不同于構造函數,靜態工廠方法可以返回返回類型的任何子類型。
4.使用靜態工廠方法減少了創建參數類型實例的繁瑣。
使用static factory method的缺點是:
1.如果僅僅提供靜態工廠方法,而不提供public或者protected構造函數的話,那么構造函數就不能被子類型化。
2.靜態工廠方法很容易同其他靜態方法混淆在一起。
結論:
In summary, static factory methods and public constructors both have their
uses, and it pays to understand their relative merits. Often static factories are preferable,
so avoid the reflex to provide public constructors without first considering
static factories.
靜態工廠方法和public的構造函數都有自己的用法,需要理解各自的相關優缺點。通常靜態工廠方法是比較合適的選擇。因此在首先不考慮靜態工廠方法的時候因避免提供public構造函數所帶來的影響。
posted on 2008-06-17 10:07
一葉笑天 閱讀(175)
評論(0) 編輯 收藏