★03.創建型模式 ★05.Singleton(單件)

意圖

保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。

別名

單例類、單例模式

動機

有些系統的類僅能有一個實例,并且希望易于訪問。如文件系統,窗口管理器。

適用性

  1. 當類只能有一個實例而且客戶可以從一個眾所周知的訪問點訪問它時。
  2. 當這個單例應該通過子類化可擴展為別的單例,并且客戶應該無需更改代碼就能使用拓展出來的單例時。(參見單件注冊表)

結構

參與者

  1. Singleton:
    • 定義一個Instance操作,允許客戶訪問它的唯一實例。Instance是一個類操作。(即C++中的一個靜態成員函數)
    • 可能負責創建它自己的唯一實例。

協作

客戶只能通過Singleton的Instance操作訪問一個Singleton的實例。

效果

  1. 對唯一實例的受控訪問。因為Singleton類封裝它的唯一實例,所以它可以嚴格的控制客戶怎樣以及何時訪問它。
  2. 縮小名稱空間。通過將原本需要全局的變量統統放進Singleton類中,可以達到縮小名稱空間的目的,避免污染名稱空間。
  3. 允許對操作和表示的精化。Singleton類可以有子類,可以通過這個子類的實例來配置一個應用。
  4. 允許可變數目的實例。可以讓Singleton類有多個實例,你可以用相同的方法來控制應用所使用的實例的數目。
  5. 比類操作更靈活。Singleton模式相比類操作(即C++中的靜態成員函數,類擁有的操作,而不是對象擁有的操作。所有類實例共享一個類操作。)更加靈活。若采用類操作,C++中的靜態成員函數不是虛函數,因此子類不能多態的重定義它們。(采用Singleton模式則不會有這種問題。)

實現

  1. 保證一個唯一的實例。
  2. 我們不知道多個單件的調用順序,所以單件之間不能存在依賴關系。
  3. 創建Singleton類的子類。(參見單件注冊表)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言 本文主要參考 那些年,我們一起寫過的“單例模式”。 何為單例模式? 顧名思義,單例模式就是保證一個類僅有一個...
    tandeneck閱讀 2,538評論 1 8
  • 1 場景問題# 1.1 讀取配置文件的內容## 考慮這樣一個應用,讀取配置文件的內容。 很多應用項目,都有與應用相...
    七寸知架構閱讀 6,887評論 12 68
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,948評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,766評論 18 399
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,367評論 11 349