設計模式之單例模式的講解與應用

2021-09-24 02:45:13 字數 1635 閱讀 4393

單例模式指的是在應用整個生命週期內只能存在乙個例項。單例模式是一種被廣泛使用的設計模式。他有很多好處,能夠避免例項物件的重複建立,減少建立例項的系統開銷,節省記憶體。1、乙個私有的構造方法

2、乙個私有的靜態的當前類的物件作為屬性

3、乙個公共的靜態的返回物件的方法

首先理解一下什麼是靜態類,靜態類就是乙個**類裡面都是靜態方法和靜態field**,**構造器被private修飾**,因此不能被例項化。math類就是乙個靜態類。 知道了什麼是靜態類後,來說一下他們兩者之間的區別:

知道了什麼是靜態類後,來說一下他們兩者之間的區別: 1)首先單例模式會提供給你乙個全域性唯一的物件,靜態類只是提供給你很多靜態方法,這些方法不用建立物件,通過類就可以直接呼叫; 2)單例模式的靈活性更高,方法可以被override,因為靜態類都是靜態方法,所以不能被override;

3)如果是乙個非常重的物件,單例模式可以懶載入,靜態類就無法做到;

那麼時候時候應該用靜態類,什麼時候應該用單例模式呢?首先如果你只是想使用一些工具方法,那麼最好用靜態類,靜態模擬單例類更快,因為靜態的繫結是在編譯期進行的。如果你要維護狀態資訊,或者訪問資源時,應該選用單例模式。還可以這樣說,當你需要物件導向的能力時(比如繼承、多型)時,選用單例類,當你僅僅是提供一些方法時選用靜態類。

1. 餓漢模式(執行緒安全) 所謂餓漢模式就是立即載入,一般情況下再呼叫getinstancef方法之前就已經產生了例項,也就是在類載入的時候已經產生了。這種模式的缺點很明顯,就是占用資源,當單例類很大的時候,其實我們是想使用的時候再產生例項。因此這種方式適合占用資源少,在初始化的時候就會被用到的。

class

singletonhungary

public

static singletonhungary getinstance()

}

2. 懶漢模式(非執行緒安全和synchronized關鍵字執行緒安全版本 ) 懶漢模式就是延遲載入,也叫懶載入。在程式需要用到的時候再建立例項,這樣保證了記憶體不會被浪費。針對懶漢模式
class

singletonlazy1

public

static singletonlazy1 getinstance()

return singletonlazy;

}}

所謂 「 懶漢式」 就是說單例例項在第一次被使用時構建,而不是在jvm在載入這個類時就馬上建立此唯一的單例例項。

但是上面這種方式很明顯是執行緒不安全的,如果多個執行緒同時訪問getinstance()方法時就會出現問題。如果想要保證執行緒安全,一種比較常見的方式就是在getinstance() 方法前加上synchronized關鍵字,如下:

public

static

synchronized singletonlazy1 getinstance()

return singletonlazy;

}

懶漢式(雙重檢查加鎖版本)
public

class

singletonlazy1

public

static singletonlazy1 getinstance()

}}return singletonlazy;

}}

單例設計模式逐步講解

單例設計模式 instance例項 singleton patten單例模式 1.類圖分為三部分,依次是類名 屬性 方法 2.以結尾的為注釋資訊 3.修飾符 代表public,代表private,代表protected,什麼都沒有代表包可見。4.帶下劃線的屬性或方法代表是靜態的。5.對類圖中物件的關...

Python與設計模式之單例模式

一 什麼是單例 即單個例項,指的是同乙個類例項化多次的結果指向同乙個物件,用於節省記憶體空間 如果我們從配置檔案中讀取配置來進行例項化,在配置相同的情況下,就沒必要重複產生物件浪費記憶體了 settings.py檔案 ip 1.1.1.1 port 3303 二 四種單例模式的實現方式 方式一 定義...

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...