單例設計模式

2021-08-18 12:51:03 字數 1522 閱讀 4051

設計模式的總原則是開閉原則:對擴充套件開放,對修改封閉。在程式需要進行拓展的時候,不能去修改原有的**,而是要擴充套件原有**。

1.  單列設計模式

某個類只有乙個例項,而且自行例項化,並且向整個系統提供這個例項。總之,選擇單列設計模式就是為了防止不一致的狀態。印表機就被設計成單例,每台計算機都可以有若干臺印表機,但只能有乙個印表機後台處理程式,以免兩個列印作業同時輸出到印表機。單例設計模式主要分為2種:餓漢式和懶漢式。

餓漢式

在類初始化的時候已經自行例項化了乙個靜態物件,供系統使用,以後不再改變,所以天生是執行緒安全的。

懶漢式:

把建構函式的訪問修飾符設定為private,防止類在外部被例項化。在同乙個虛擬機器範圍內,singleton2的唯一例項只能通過getinstance()方法訪問。在多執行緒的情況下,不是執行緒安全的。可能會出現多個singleton2的例項。有4種執行緒安全的方式:同步鎖、雙重檢查鎖定、靜態內部類、列舉法。

同步鎖:

該方法雖然執行緒安全了,但是每次呼叫getinstance()來訪問例項時,都要加鎖,加鎖是乙個特別耗效能的操作,效率低下。

雙重檢查鎖定:

比上一種方法好一點,只有改單例物件還沒有建立的時候才需要加鎖,執行緒安全。但是2次if操作,**實現起來比較複雜。

靜態內部類:

利用了類載入器的效能保證初始化single時只有乙個執行緒,所以也是執行緒安全的,也沒有效能損耗。

列舉:

自由序列化,只有乙個例項,執行緒安全。

餓漢式和懶漢式的區別:

1)  餓漢式是執行緒安全,懶漢式本身不是執行緒安全的。可用以上4種方法可以實現執行緒安全。

2)  資源載入和效能:餓漢式在類初始化的時候就建立了乙個靜態物件,不管之後用不用這個單例,他都會佔據一定的記憶體。但是相應的,第一次呼叫時速度會很快,因為其資源已經載入出來。而懶漢式會延遲載入,在第一次使用該單例的時候才會例項化物件,第一次呼叫時要做初始化,需要資源載入,所以效能上面會有延遲。之後就和餓漢式就一樣了。

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

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

設計模式 單例設計模式

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

設計模式 單例設計模式

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