Java 單例設計模式、餓漢單例、懶漢單例


什麼是單例?

單例的意思是一個類永遠只存在一個對象, 不能創建多個對象。

爲什麼要用單例?

開發中有很多類的對象我們只需要一個, 例如虛擬機對象、任務管理器對象
對象越多越佔內存,有些時候只需要一個對象 就可以實現業務,單例可以節約內存,提高性能。


如何實現單例?

餓漢單例設計模式:

通過類獲取單例對象的時候,對象已經提前做好了
實現步驟:

  1. 定義一個單例類
  2. 把類的構造器私有
  3. 定義一個靜態成員變量用於存儲一個對象
    (餓漢單例在返回對象的時候,對象要已經做好,所以這裏直接創建出來)
  4. 定義一個方法返回單例對象
public class SingleInstanceDemo1 {
    public static void main(String[] args) {
        SingleInstance01 s1 = SingleInstance01.getInstance();
        SingleInstance01 s2 = SingleInstance01.getInstance();
        System.out.println(s1 == s2);//true
    }
}

//餓漢單例設計一個單例類
class SingleInstance01{
    //2.定義一個靜態成員變量存儲一個對象
    //餓漢單例需要提前把對象創建好
    public static SingleInstance01 ins = new SingleInstance01();

    //1.私有構造器,構造器只能在本類使用
    private SingleInstance01(){}

    //3.提供一個方法返回單例對象
    public static SingleInstance01 getInstance(){
        return ins;
    }

}


懶漢單例設計模式:

通過類獲取單例對象的時候發現沒有對象纔會去創建一個對象。
實現步驟:

  1. 定義一個單例類
  2. 把類的構造器私有
  3. 定義一個靜態成員變量用於存儲一個對象
    ( 懶漢單例不能直接創建對象,必須雷要的時候才創建)
  4. 定義一個方法返回單例對象,判斷對象不存在才創建一次, 存在直接返回
public class SingleInstanceDemo2 {
    public static void main(String[] args) {
        SingleInstance02 s1 = SingleInstance02.getInstance();
        SingleInstance02 s2 = SingleInstance02.getInstance();
        System.out.println(s1 == s2);//true
    }
}

//懶漢單例設計一個單例類
class SingleInstance02{

    //2.定義一個靜態成員去存儲對象
    //不能直接創建對象,需要再創建
    public static SingleInstance02 ins;

    //1.構造器私有
    private SingleInstance02(){};

    //3.返回對象
    public static SingleInstance02 getInstance(){
        if (ins == null){
            //1.第一次去對象。創建一個對象
            ins = new SingleInstance02();
        }
        return ins;
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章