軟體設計模式之單例模式

2022-09-15 13:42:11 字數 806 閱讀 3263

保證乙個類僅有乙個例項,並提供乙個全域性訪問點

建立型想確保任何情況下都絕對只有乙個例項

在記憶體裡只有乙個例項,減少了記憶體開銷。

可以避免對資源的多重占用。

設定全域性訪問點,嚴格控制訪問。

沒有介面,擴充套件困難

傳統懶漢模式

**如下:

public class lazysingleton 

public static lazysingleton getinstance()

return lazysingleton;}}

雙重檢查懶漢模式
public class lazydoublechecksingleton 

public static lazydoublechecksingleton getinstance() }}

return lazydoublechecksingleton;}}

jvm建立物件有以下幾步:

1、給物件分配記憶體空間;

2、初始化物件;

3、設定例項指向剛分配的記憶體位址;

4、初次訪問物件。

但是在實際的建立物件的過程中,2,3兩步有可能出現指令重排,也就是先執行3,2的順序,這種改變在單執行緒中是沒有問題的,實際在多執行緒中也沒太大的問題,只是出現極端情況下,會出現問題,如下圖所示:

volatile有兩個作用:記憶體可見性和禁止指令重排。在這段**中保證了指令的順序性,不會重排序。

軟體設計模式 單例模式

單例模式,顧名思義,就是只能由乙個例項,那麼我們就必須保證 該類不能被複製。該類不能被公開的創造。那麼對於c 來說,他的建構函式,拷貝建構函式和他的賦值函式都不能被公開呼叫。但對於該私有的建構函式的構造時機上來說也可以分兩種情況來構造 只有當需要改類的時候去構造 即為懶漢模式 在程式開始之前我就先構...

軟體設計模式 單例模式

前篇 軟體設計模式 基礎 前篇 軟體設計模式 三種工廠模式 前篇 軟體設計模式 裝飾者模式 單例模式是建立型模式 2.單例模式的實現 3.例子 在實踐專案開發中經常會遇到一些物件,這樣的物件在全域性當中僅存在乙個就可以。如果出現多個。程式執行可能會失敗。或是記憶體上的管理問題。就是只需要乙個即可,比...

軟體設計模式修煉 單例模式

通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於被外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決辦法。對系統中某些類來說,只有乙個例項很重要,例如,乙個系統只能有乙個視窗管理器或檔案系統。因此確保系統中某個物件的唯一性即乙個...