java設計模式:單例模式
阿新 • • 發佈:2018-05-14
速度 [] urn == public void 支持 不變 實例化
所謂設計模式,就是一套反復會他人使用,大多數人熟知的一種設計模式。
優點:
讓代碼更容易被他人理解,保證的代碼的重用性和可靠性。
單例模式分為兩種,一種是餓漢模式,另外一種是懶漢模式。
單例模式適用於那些有且有一個對象的項目,比如說日誌,配置文件等。
餓漢模式:
餓漢模式我們可以通過私有的構造方法去實現,這樣可以防止外界通過構造方法去創建多個實例,我們可以在類中創建構造方法的唯一實例,下面看具體例子:
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設計模式:單例模式