建立和銷毀物件 考慮用靜態工廠方法代替建構函式

2021-04-09 10:34:00 字數 824 閱讀 9566

類可以提供乙個公有的靜態工廠方法,它用來返回這個類的例項,從而可以構造這個類的物件。

靜態工廠方法的好處:

它與建構函式不同,靜態工廠方法具有名字。這個好處可以幫助我們擺脫乙個類只能有乙個原型相同的建構函式的限制。舉個例子來說:

public class a

public a(int a,int b)//

明顯的錯誤 }

就像上面**所示,這麼做是絕對不可能的,建構函式的簽名只在引數上進行區分,如果我們想用同一種引數實現不同的建構函式,那麼建構函式的侷限性就肯定了它是做不到的。但是我們可以利用靜態工廠方法來輕鬆解決這個問題:

public class a

public static a div(int a,int b)

}很明顯,我們可以用相同的引數來構造不同的物件了,如:

a a1=a.sum(5,5);

a a2=a.div(5,5);

我們做了什麼一幕了然。當然這個例子可能有些不倫不類,但是在這裡僅僅想說明這個問題,很極端但是很明確。

靜態工廠方法每次被呼叫的時候,不要求非得建立乙個新的物件。有的時候我們僅僅需要這個類所表示某些項,但是不需要這個類的例項,那麼靜態工廠方法可以很好的滿足這個要求。

靜態工廠方法可以返回乙個原返回型別的子型別的物件。

靜態工廠方法的缺點:

類如果不含公有的或者受保護的建構函式,就不能被子類化。對於公有的靜態工廠所返回的非公有類,也是同樣的。如果乙個類沒有共有的或者受保護的建構函式,那麼這個類就不能被繼承。

靜態工廠方法與其他的靜態方法沒有任何區別。

在api

文件中,它們不會像建構函式那樣被明確標識出來。

effective java 建立和銷毀物件

b 1.考慮靜態方法替代建構函式 b 靜態工廠方法有3個好處 b a.b 靜態工廠方法具有名字使程式碼易讀,名字不必和類名一樣具有更高靈活性。b b.b 實現singleton模式。b c.b 能返回乙個原返回型別的子類,形成面向介面程式設計的好習慣。壞處 b a.b 不能被繼承。b b.b 不夠物...

物件的建立和銷毀

考慮用靜態工廠方法代替構造器 示例 public static boolean valueof boolean b 當構造引數很多的時候考慮使用建造者 模式 示例 原始 public class nutritionfacts builder pattern public class nutritio...

1 建立和銷毀物件

1.使用建構函式 2.使用返回物件的靜態函式 1.方法中的區域性變數 必須初始化才可以進行使用 2.類的屬性變數 可以不進行初始化 物件的reference初始化為null 基本型別變數會自動的初始化 3.變數的初始化順序 3.1首先初始化類的屬性 呼叫他們的建構函式 3.2呼叫自己的建構函式 例子...