23種設計模式之 單例模式

2021-07-02 19:57:48 字數 1046 閱讀 4754

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

讓類自身負責儲存它的唯一例項,這個類可以保證沒有其他例項可以被建立,並且它可以提供乙個訪問(獲取)該例項的方法。

單例類應滿足以下特點:

單例類(singleton):自己例項化自己的唯一例項,並提供訪問該唯一例項的方法。

public class singleton 

//靜態方法

public static singleton getinstance()

}

從本例中可以看到因為singleton類的構造方法是私有的,因此外部類無法用new來例項化singleton類,而只能通過singleton類本身例項化自己。私有靜態變數singleton在singleton類被載入的時候進行例項化,然後通過getinstance靜態方法獲取例項化後的singleton類例項。這樣就可以通過getinstance方法獲取singleton類的唯一例項。因為在singleton類載入時進行例項化,所以此種寫法也稱為餓漢式單例類。

優點:缺點:

public class singleton 

//靜態方法

public static synchronized singleton getinstance()

return singleton;

}}

從本例中可以看到與餓漢式單例類不同的是,singleton類在載入時不在例項化自己,而是在getinstance靜態方法中進行例項化。同時為了避免在多執行緒的情況下呼叫getinstance方法時會出現多個例項的情況,增加了synchronized關鍵字以保證執行緒的安全性。此種寫法也稱為

懶漢式單例類。

優點:

缺點:注意:餓漢式單例和懶漢式單例由於構造方法為私有的(private),所以無法實現繼承關係。為了實現繼承的單例類,可以參考登記式單例類,本文不做過多介紹。

23種設計模式之單例模式

我們也經常遇到類似的情況,為了節約系統資源,有時需要確保系統中某個類只有唯一乙個例項,當這個唯一例項建立成功之後,我們無法再建立乙個同型別的其他物件,所有的操作都只能基於這個唯一例項。為了確保物件的唯一性,我們可以通過單例模式來實現,這就是單例模式的動機所在。定義 單例模式 singleton pa...

23種設計模式之單例模式

單例模式 確保乙個類最多只有乙個例項,並提供乙個全域性訪問點 普通單例模式示例 有問題 public class singleton public static singleton getinstance return uniqueinstance 示例singleton public class ...

23種設計模式之單例模式

單例模式,屬於建立型別的一種常用的軟體設計模式。通過單例模式的方法建立的類在當前程序中只有乙個例項。單例模式是23種設計模式中比較簡單,也是比較重要的一種設計模式。在現在流行的框架中十分常見,比如 mybatis框架。新學期的第一天,小洪早早地來到教室上課,班主任是個美女呢!但是這個班主任很懶,每次...