創建有效的對象:
1.用靜態工廠代替構造器。
靜態工廠———— 靜態方法。
構造器——————是一種特殊類型的方法,他與類同名,沒有返回類型,和new關鍵字結合可以返回對象實例的引用。
優勢:
1)靜態工廠方法與構造器不同的第一大優勢在於,它們有名稱,使客服端代碼更加容易被閱讀,確切的描述返回值類型。
2)不必在每次調用的它們的時候都創建一個新的對象(這個完全取決於具體的實現)。
3)它們可以返回原返回類型的任何子類型的對象。
這種靈活性的一種應用:API可以返回對象,同時又不會使對象的類變成公有的。公有的靜態方法所返回的對象的類不僅可以是非公有的,而且該類還可以隨着每次調用而發生變化着取決於靜態工廠方法的參數值,只要是已聲明返回類型的子類型,都是允許的。
4)在創建參數化類型(也就是泛型,jdk1.5新特性)實例的時候,它們是的代碼變得更加簡潔。
缺點:
1)類如果不含有他的公有或者受保護的構造器,就不能被子類化(即被繼承)。
2)它們與其他靜態方法實際上沒有任何區別。
常用的靜態工廠名稱: valueOf
, of
, getInstance
, newInstance
,g etType
, newType
.
創建對象的方法:
- 構造器
- 靜態工廠方法
- 通過Builder
不直接生成想要的對象,而是讓客戶端利用所有必要的參數調用構造器,得到一個builder對象,然后客戶端在builder對象上調用類似於setter的方法,來設置每個可選參數,最后在客戶端調用無參的build()方法來生成對象。下面是一個簡單的示例:
2 遇到多個構造器參數時考慮用構建器
當參數大於三個的時候,就可以考慮使用構建器了,特別實在參數可選的時候。
public class Person{ public Person name(String name){return this;} public Person age(String age){return this;} public Person gender(String gender){return this;} public Person tel(String tel){return this;} } //使用的時候可以這樣用 (new Person()).name("xingoo").age(30).gender("male").tel(13333333333);
也可以在一個類中重載來實現。
1.重寫必須繼承,重載不用。
2.重寫的方法名,參數數目相同,參數類型兼容,重載的方法名相同,參數類型和個數不同。
3.重寫的方法修飾符大於等於父類的方法,重載和修飾符無關。
4.重寫不可以拋出父類沒有拋出的一般異常,可以拋出運行時異常
缺點: 使用構建器的缺點就是代碼會比較冗長。
遇到許多構造器參數的時候換可以用Javabean的方式,