Java設計模式之《實現單例模式》以及單例應用場景詳解

Java的設計模式總共有20多種,其中最簡單的一種就是單例模式,所謂單例,根據字面意思很好理解,指的就是整個系統某個類有且僅有一個該類的實例,這個單例不應該人爲來控制,而應該由代碼來限制,強制單例。

  單例有其獨有的使用場景,一般是對於那些業務邏輯上限定不能存在多實例的情況,例如:類似於計數器,統計網站訪問人數等場景,都需要使用一個系統唯一實例來進行記錄,若多實例計數則會不準確。

  筆者認爲有關單例模式的重點不在於應用場景,而在於如何使用,下面直接看代碼

常見的單例模式有兩種實現方式:懶漢式與餓漢式

(1)懶漢式

  懶漢式就是不在系統加載時創建類的實例,而是在實際業務代碼中第一次使用該類的實例的時候才創建。詳見下方代碼示例

public class SingleInstance {
    //定義一個私有類變量來存放單例,私有的目的是指外部無法直接獲取這個變量,而要使用本類提供的公共方法來獲取
    private static SingleInstance instance = null;
    //定義私有構造器,表示只在類內部使用,亦指單例的實例只能在單例類內部創建
    private SingleInstance (){}
    //定義一個公共的公開的方法來返回該類的實例,由於是懶漢式,需要在第一次使用時生成實例,所以爲了線程安全,使用synchronized關鍵字來確保只會生成單例
    public static synchronized SingleInstance getInstance(){
        if(instance  == null){
            instance  = new SingleInstance ();
        }
        return instance ;
    }
}

(2)餓漢式

 在系統加載該類的時候就會創建類的實例,並保存在類中。詳見下方代碼示例:

public class SingleInstance{
    //此處定義類變量實例並直接實例化,在類加載的時候就完成了實例化並保存在類中
    private static SingleInstance instance = new SingleInstance();
    //定義無參私有構造器,用於只能在本類創建實例
    private SingleInstance(){}
    //定義公開方法,返回已創建的單例
    public static SingleInstance getInstance(){
        return instance ;
    }
}

 

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