單例設計模式可以分為;
懶漢式餓漢式雙重檢測鎖
靜態內部類列舉
下面是詳細介紹:
public
class
singleton
public
static
singleton getinstance()
}
優點:這種寫法比較簡單,就是在類裝載的時候就完成例項化。避免了執行緒同步問題。
缺點:在類裝載的時候就完成例項化,沒有達到lazy loading的效果。如果從始至終從未使用過這個例項,則會造成記憶體的浪費。
public
class
singleton
private
static
singleton instance;
public
static
synchronized
singleton getinstance()
return
instance;
}}
這種方式和上面的方式其實類似,只不過將類例項化的過程放在了靜態**塊中,也是在類裝載的時候,就執行靜態**塊中的**,初始化類的例項。優缺點和上面是一樣的。
public
class
singleton
public
static
singleton getinstance() }}
return
singleton;
}}
double-check概念對於多執行緒開發者來說不會陌生,如**中所示,我們進行了兩次if (singleton == null)檢查,這樣就可以保證執行緒安全了。這樣,例項化**只用執行一次,後面再次訪問時,判斷if (singleton == null),直接return例項化物件。
public
class
singleton
private
static
class
singletoninstance
public
static
singleton getinstance()
}
這種方式跟餓漢式方式採用的機制類似,但又有不同。兩者都是採用了類裝載的機制來保證初始化例項時只有乙個執行緒。不同的地方在餓漢式方式是只要singleton類被裝載就會例項化,沒有lazy-loading的作用,而靜態內部類方式在singleton類被裝載時並不會立即例項化,而是在需要例項化時,呼叫getinstance方法,才會裝載singletoninstance類,從而完成singleton的例項化。
類的靜態屬性只會在第一次載入類的時候初始化,所以在這裡,jvm幫助我們保證了執行緒的安全性,在類進行初始化時,別的執行緒是無法進入的。
優點:避免了執行緒不安全,延遲載入,效率高。
public
enum
singleton
}
使用方法;
singleton s1
=
singleton.
instance
;
singleton4 s2
=singleton
.
instance
;
if
(s7==
s8)
else
執行結果:
s1和s2是同乙個例項
;
借助jdk1.5中新增的列舉來實現單例模式。不僅能避免多執行緒同步問題,而且還能防止反序列化重新建立新的物件。可能是因為列舉在jdk1.5中才新增,所以在實際專案開發中,很少見人這麼寫過。
23種設計模式 建立型模式 單例模式
單例類只有乙個例項物件 該單例物件必須由單例類自行建立 單例類對外提供乙個訪問該單例的全域性訪問點。單例模式的優點 1.單例模式可以保證記憶體裡只有乙個例項,減少了記憶體的開銷。2.可以避免對資源的多重占用。3.單例模式設定全域性訪問點,可以優化和共享資源的訪問。單例模式的缺點 1.單例模式一般沒有...
23種設計模式總結之 建立型模式
建立型模式用來處理物件的建立過程,主要包含以下5 種設計模式 1,工廠方法模式 factory method pattern 的用意是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類中。2,抽象工廠模式 abstract factory pattern 的意圖是提供乙個建立一系列相關或者相互...
23種設計模式 單例模式(5種)
常見應用場景 window中任務管理器就是典型的單例 window中 站 專案中,讀取配置檔案的類,一般也只有乙個物件,沒有必要每次使用配置檔案資料,每次new乙個物件去讀取 的計數器 保證同步 應用程式的日誌應用,資料庫連線池一般也是採用單例,因為資料庫連線也是一種資料庫資源 public cla...