標籤:建立 一個 == 代碼 實現 tin 多線程 public java設計
所謂設計模式,就是一套反覆會他人使用,大多數人熟知的一種設計模式。
優點:
讓代碼更容易被他人理解,保證的代碼的重用性和可靠性。
單例模式分為兩種,一種是餓漢模式,另外一種是懶漢模式。
單例模式適用於那些有且有一個對象的項目,比如說日誌,設定檔等。
餓漢模式:
餓漢模式我們可以通過私人的構造方法去實現,這樣可以防止外界通過構造方法去建立多個執行個體,我們可以在類中建立構造方法的唯一執行個體,下面看具體例子:
public class guohe { //建立一個靜態構造方法,防止外部直接調用 private guohe(){ } //建立本類的唯一執行個體 private static guohe Instace = new guohe(); //提供給外部調用的唯一執行個體 public static guohe getInstace(){ return Instace; }}
測試類別:
public class use { public static void main(String[] args) { guohe guohe01 = guohe.getInstace(); guohe guohe02 = guohe.getInstace(); if (guohe01 == guohe02){ System.out.println("他們兩個是同一個執行個體"); }else { System.out.println("他們兩個不是同一個執行個體"); } }}
列印結果:
他們兩個是同一個執行個體
那麼餓漢模式到底體現在哪裡呢?上面提供的執行個體是用static修飾的,也就是說,在類被載入的時候,他就會被自動載入,就像一個餓漢,像儘快吃飽。
--------
懶漢模式:
直接上代碼,下面再解釋:
public class guohe { //建立一個靜態構造方法,防止外部直接調用 private guohe(){ } //聲明執行個體,但是並不去建立 private static guohe Instace; //提供給外部調用的唯一執行個體 public static guohe getInstace(){ if (Instace == null){ Instace = new guohe(); } return Instace; }}
調用的main方法和上面的保持不變,就不貼了。
我們可以看到,在懶漢模式中我們只是去聲明類的執行個體,但是並沒有去執行個體化,也就是說,當類被載入的時候,並沒有去建立唯一的執行個體,而是當使用者去擷取的時候,他才會去做判斷,如果執行個體為空白的話,才會去擷取。
我們可以看到,當使用者使用懶漢模式的話,那麼在以後的第二個或者第N個用去再去操作,就不需要再次擷取了,因為在做判斷的時候,執行個體化已經存在,這種設計模式我們稱為懶漢模式。
餓漢模式PK懶漢模式:
1、載入餓漢模式比較慢,因為在載入的時候,他就自動去建立類的執行個體了,但是在運行時擷取對象的速度比較快,因為在訪問類的時候,static修飾的就自動執行了。
2、載入懶漢模式比較快,因為在載入類的時候並沒有自動去建立,所以在啟動並執行時候是比較慢的,因為在載入類的時候並沒有自動去執行個體化,聽著比較繞,但是確實是這樣的道理。
--------總結:
餓漢模式是安全執行緒的,也就是支援對線程,而懶漢模式是線程不安全的,不支援多線程。餓漢模式是用空間換時間,懶漢模式是用時間換空間。
java設計模式:單例模式