23種設計模式之單例

2021-08-29 21:01:58 字數 993 閱讀 4047

目錄

1.簡介

2.優點

3.缺點

4.注意

5.形式

5.1 餓漢模式

5.2 懶漢模式

6.擴充套件

單例模式(singleton pattern),為確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。其中的類稱為單例類,通過將建構函式設定為private私有訪問許可權從而限制外部建立物件,也就確保了在乙個應用中只產生乙個例項,並且自行例項化。

1.由於記憶體中只有乙個例項,從而減少了記憶體的開支;

2.避免了對資源的多重占用;

3.優化和共享資源訪問,通過設定全域性的訪問點。

1.單例模式一般沒有介面,擴充套件困難;

2.測試受限;

3.與單一職責原則衝突。

高併發的情況下,需注意單例模式執行緒同步的問題。

public class singleton 

public static singleton getsingleton()

}

優點在於只會在類載入時建立,也就避免了多執行緒同步的問題。但是缺點也很明顯,如果類載入了卻沒有被用到,也就浪費了記憶體空間。

public class singleton 

public static synchronized singleton getsingleton()

return singleton;

}}

可以看到懶漢模式是在需要時建立,並且通過在getsingleton方法前新增synchronized也就避免了執行緒安全問題。當然也可以把synchronized提到裡面形成同步**塊

產生指定數目的物件

public class some 

}private some()

public static some getsome()

}

23種設計模式之單例模式

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

23種設計模式之 單例模式

保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。讓類自身負責儲存它的唯一例項,這個類可以保證沒有其他例項可以被建立,並且它可以提供乙個訪問 獲取 該例項的方法。單例類應滿足以下特點 單例類 singleton 自己例項化自己的唯一例項,並提供訪問該唯一例項的方法。public class s...

23種設計模式之單例模式

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