單例設計模式

2021-07-25 18:14:36 字數 1667 閱讀 9990

單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例類的特殊類。通過單例模式可以保證系統中一類只有乙個例項而且該例項易於外界訪問,從而達到使用目的,同時還能方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。

在這裡對於單例設計模式的用法以及不同的寫法會遇到的一些坑作了一些總結並寫了一些示例:

public

class

single

/*** 餓漢式

* 說明:如果這個類用的比較頻繁,又不需要考慮太多節省資源的問題,就可以直接用餓漢式

*/static class single1

public

static single1 getinstance()

}/**

* 懶漢式

* 說明:這個類可能用得不是特別頻繁,有可能會用也有可能不會用到,那麼沒必要在程式一啟動的時候就將其載入記憶體,這個時候可以考慮用懶漢式。

*/static class single2

public

static single2 getinstance()

return single2;}}

/*** 懶漢式解決執行緒同步的問題1

* 說明:如果同時存在多個執行緒會訪問這個類,那麼這個時候就要考慮執行緒同步的問題,否則可能建立多個例項。

*/static class single3

public

synchronized

static single3 getinstance()

return single3;}}

/*** 懶漢式解決執行緒同步的問題2

* 說明:像第一種方式是可以解決同步問題,但是方式略微有些暴力,一旦有乙個執行緒在訪問它,其它的根本進不來,這個時候可以選擇為訪問者開放一些許可權,讓其可以進入方法

*/static class single4

public

static single4 getinstance()

}return single4;}}

/*** 懶漢式解決執行緒同步的問題3

* 說明:single4和single3好像差不太多,貌似都沒有節省太多資源,雖然single4是進入到了方法內,

* 但是還是一樣的等待,我們有沒有一種方法可以判斷對像如果已經建立就不要再等待了,如果沒建立就等待,

* 看以下這種方法,它很好的解決了這個問題,如果已經建立了,就直接返回物件,不用做任何的加鎖操作。

*/static class single5

public

static single5 getinstance()

}return single5;}}

/*** 懶漢式解決執行緒同步的問題3

* 說明:上面的方法似乎已經完美了,但還是會有乙個缺陷,想想看:如果兩個執行緒的訪問者都已經通過了鎖,

* 都進入到了synchronized內部,那麼這個時候會又會建立多個物件,這個時候應該在裡面再多一層的判斷,

* 好的,這樣完美解決了執行緒的同步的問題,而又不失效率。

*/static class single6

public

static single6 getinstance() }}

return single6;}}

}

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

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

設計模式 單例設計模式

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

設計模式 單例設計模式

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