單例設計模式

2021-10-08 13:50:13 字數 1761 閱讀 1945

​ 乙個應用程式中,某個類的例項物件只有乙個,而且自行例項化並向整個系統提供這個例項。在計算機系統中,執行緒池、快取、日誌物件、對話方塊、印表機、顯示卡的驅動程式物件常被設計成單例。你沒有辦法去new,因為構造器是被private修飾的,一般通過getinstance()的方法來獲取他們的例項。getinstance()的返回是乙個物件的引用,並不是乙個新的例項,所以不要錯誤的理解成多個物件。

單例模式有以下特點:

​ 單例類自己建立並且只能建立乙個例項,並且必須給所有其他物件提供這個例項

需要:構造方法私有化

使用private static在該類內部產生乙個唯一的例項物件

定義乙個靜態方法返回這唯一的物件

實現一:立即載入/「餓漢模式

使用類的時候已經將物件建立完畢(不管以後會不會使用到該例項化物件,先建立了再說。很著急的樣子,故稱為「餓漢模式」),常見的實現方法就是直接new 例項化。

public

class

singleton

// 靜態方法返回該例項

public

static singleton getinstance()

}

「餓漢模式」優缺點

優點:實現起來簡單,沒有多執行緒問題。

缺點:因為它是在類載入的時候就被建立,所以不管該物件是否會被用到都已經建立了。在某些場景下會耗費記憶體。

實現二:延遲載入/「懶漢模式

延遲載入就是呼叫get()方法時例項才被建立(先不著急例項化出物件,等要用的時候才建立出來,不著急,故又稱為「懶漢模式」),常見的實現方法就是在get方法中進行new例項化。

public

class

singleton

// 靜態方法返回該例項

public

static singleton getinstance()

return instance;

}}

「懶漢模式」的優缺點

優點:實現起來比較簡單,當類singleton被載入的時候,靜態變數static的instance未被建立並分配記憶體空間,當getinstance方法第一次被呼叫時,初始化instance變數,並分配記憶體,因此在某些特定條件下會節約記憶體。

缺點:在多執行緒環境中,這種實現方法是完全錯誤的,根本不能保證單例的狀態。

實現三: 執行緒安全的「懶漢模式」

public

class

singleton

// 靜態方法返回該例項,加synchronized關鍵字實現同步

public

static

synchronized singleton getinstance()

return instance;

}}

優點:在多執行緒情況下,保證了「懶漢模式」的執行緒安全。

缺點:synchronized方法通常效率低,這並不是最佳的實現方案。

實現四:雙重鎖機制

public

class

singleton

// 靜態方法返回該例項

public

static singleton getinstance()

}}return instance;

}}

方法四算是單例模式的最佳實現方式。記憶體佔用率搞,執行緒安全,多執行緒操作原子性。

單例設計模式(餓漢單例設計模式 懶漢單例設計模式)

1.什麼是單例 單例的意思是乙個類永遠只存在乙個物件,不能建立多個物件。2.為什麼要用單例 開發中有很多的物件我們只需要乙個,例如虛擬機器物件,任務管理器物件 物件越多越佔記憶體,有時候只需要乙個物件就可以實現業務,單例可以節省記憶體空間。3.如何實現單例 單例的實現方式有 餓漢單例設計模式 通過類...

設計模式 單例設計模式

歷史 最早是建築學領域的模式,然後gof四人由其引申到編碼方面,總結了23種設計模式 設計模式 解決某一類事情最行之有效的方法 2.1 體現 餓漢式,保證物件的唯一性 class singleton 私有化建構函式禁止該類建立物件 private static singleton st new si...

設計模式 單例設計模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。單例設計模式 解決的問題 可以保...