1. 程式人生 > >java設計模式:單例模式

java設計模式:單例模式

速度 [] 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設計模式:單例模式