建立類的執行個體最常見的是new 除此外還可以使用靜态工廠方法,來封裝執行個體的細節,并且能控制執行個體的數量,減輕jvm的堆棧中的壓力。
靜态工廠方法與用new語句調用的構造方法相比,有以下差別:
1:構造方法的名字必須與類名相同。這一特性的優點是符合Java語言的規範,缺點是類的所有重載的構造方法的名字都相同,不能從名字上區分每個重載方法,容易引起混淆。靜态工廠方法的方法名可以是任意的,這一特性的優點是可以提高程式代碼的可讀性,在方法名中能展現與執行個體有關的資訊。
eg:public class TottiStaticDemo{
private static final TottiStaticDemo demo = new TottiStaticDemo();
public static TottiStaticDemo getInstance(){
return demo;
}
public void outPutStatic(){
System.out.println("Test Static Factory Class!");
}
}
如果需要在其他類中調用TottiStaticDemo類中的outPutStatic方法,那麼隻需要使用如下語句即可:
TottiStaticDemo.getInstance().outPutStatic();而不必使用new關鍵字。
2:每次執行new語句時,都會建立一個新的對象。而靜态工廠方法每次被調用的時候,是否會建立一個新的對象完全取決于方法的實作。
3:new語句隻能建立目前類的執行個體,而靜态工廠方法可以傳回目前類的子類的執行個體,這一特性可以在建立松耦合的系統接口時發揮作用。
***靜态工廠方法最主要的特點是:每次被調用的時候,不一定要建立一個新的對象。利用這一特點,靜态工廠方法可用來建立以下類的執行個體。
<1> 單例類:隻有惟一的執行個體的類。
<2>枚舉類:執行個體的數量有限的類。
<3>具有執行個體緩存的類:能把已經建立的執行個體暫且存放在緩存中的類。
<4>具有執行個體緩存的不可變類:不可變類的執行個體一旦建立,其屬性值就不會被改變。