設計模式之Singleton 單例模式

2021-08-30 14:25:09 字數 671 閱讀 6678

一般singleton模式通常有幾種形式

public class singleton

private singleton(){}

//在自己內部定義自己乙個例項,是不是很奇怪?

//注意這是private 只供內部呼叫

private static singleton instance = new singleton();

//這裡提供了乙個供外部訪問本class的靜態方法,可以直接訪問

public static singleton getinstance()

} 第二種形式:

public class singleton

使用singleton.getinstance()可以訪問單態類。

上面第二中形式是lazy initialization,也就是說第一次呼叫時初始singleton,以後就不用再生成了。

注意到lazy initialization形式中的synchronized,這個synchronized很重要,如果沒有synchronized,那麼使用getinstance()是有可能得到多個singleton例項。關於lazy initialization的singleton有很多涉及double-checked locking (dcl)的討論,有興趣者進一步研究。

一般認為第一種形式要更加安全些。

設計模式之 單例 Singleton

單例模式最初的定義出現於 設計模式 艾迪生維斯理,1194 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式是 設計模式 中最簡單的形式之一。這一模式的目的是使得類的乙個物件成為系統中的唯一例項。要實現這一點,可以從客戶端對其進行例項化開始。因此需要用一種只允許生成物件類的唯一例項的...

設計模式之 單件模式(Singleton)

單件模式的實現很簡單,基本上沒什麼好說,就說幾點 為什麼要單件模式?因為程式中很多物件只能有乙個,如日誌檔案,印表機等,如果出現多個就麻煩了。為什麼不用全域性變數?的確用全域性變數可以實現只有乙個物件,但是全域性變數必須在程式啟動的時候就初始化,萬一我們的物件很耗資源,但又不一定用到的話,全域性變數...

設計模式之單件模式(Singleton)

設 計模式之單件模式 singleton 將類設計成單件模式之後,在系統中生成得物件只有乙個,任何方法呼叫這個類,只能通過制定得方法得到這個類的唯一物件,類似於普通類中的靜態方法和屬性,不管這個類進行了多少次例項化,在記憶體中對於宣告的靜態方法和屬性只有乙個!利用單件模式,這個類裡的方法和屬性在記憶...