單例模式


???????單例模式的作用是保證整個應用程序的生命周期中,任何一個時刻,單例類的實例都只存在一個(也可以不存在)。
???????單例模式確保某一個類只有一個實例,而且自行實例化,并向整個系統提供這個實例單例模式只應在有真正的‘單一實例’需求時才可使用。
全局變量和單例模式的區別為:

  • 全局變量是對一個對象的靜態引用,全局變量確實可以提供單例模式實現的全局訪問這個功能,但是它并不能保證應用程序中只有一個實例;
  • 編碼規范也明確指出應該要少用全局變量,因為過多使用全局變量,會造成代碼難度;
  • 全局變量并不能實現繼承(雖然單例模式在繼承上也能很好地處理,但是還可以實現繼承的)。而單例模式在類中保存了它的唯一實例,這個類它可以保證只能創建一個實例,同時它還提供了一個訪問該唯一實例的全局訪問點。

單例類的構造函數必須為私有的,同時單例類必須提供一個全局訪問點。
靜態內部類單例模式:

public class Singleton{
    private Singleton(){}
    public static Singleton getInstance(){
        return SingletonHolder.instance;
    }
    /*靜態內部類*/
    private static class SingletonHolder{
        private static final Singleton instance = new Singleton();
    }
}

???????當第一次加載Singleton類時并不會初始化instance,只有在第一次調用Singleton的getInstance方法時才會導致instance被初始化,因此第一次調用getInstance方法會導致 虛擬機加載SingletonHolder類,這種方式不僅能夠確保線程安全,也能夠保證單例對象的唯一性,同時也延遲了單例的實例化,所以這是推薦使用的單例模式實現方式。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容