拓荒牛系列一 單例模式

2021-10-11 22:50:36 字數 1158 閱讀 9128

單例模式,即保證乙個類最多只有乙個例項化物件,並提供全域性訪問該物件的方法。

單例模式,有懶漢式和餓漢式兩種經典的實現方式。

餓漢式:不管三七二十一,像乙個餓漢一樣,類載入的時候就事先例項化乙個該類的物件。此後每次需要使用該單例時,都無需再new出物件,直接返回早已提前生成的那個唯一物件例項即可。餓漢式可能因生成無需被使用的物件而造成記憶體資源的浪費,但不會有執行緒安全的問題,實現邏輯較為簡單。

**如下:

public class hungrysingleton {

private static final singletoninstance = new hungrysingleton();

private void hungrysingleton() {

public hungrysingleton getinstance {  

return singletoninstance;

懶漢式:非常懶惰地,只有在需要的時候才去嘗試生成該類的例項化物件,如果發現物件尚未被生成,則new出物件後返回它;如果發現物件已經被生成了,則直接返回該唯一物件;懶漢式不會因為生成無需被使用的物件而造成記憶體資源的浪費,但需要考慮執行緒安全問題,實現邏輯較為複雜。

**如下:

public class lazysingleton{

private static valetile singletoninstance = new lazysingleton(); // 加valetile禁止指令重排序,防止了可能的空指標異常

private void hungrysingleton() {

public lazysingleton getinstance {

if(null == singletoninstance) { // 只有物件尚未生成時,才需要加鎖,這裡提公升了效能

syschronize(lazysingleton.class) { // 鎖,防止併發場景下多個執行緒同時去例項化物件

if(null == singletoninstance) { // 雙重檢查

singletoninstance = new lazysingleton(); // 有指令重排序風險(1、分配記憶體空間;2、例項化物件;3、將物件指向該記憶體空間,若不加valetile,3步可能在2步之前執行)

return singletoninstance;

設計模式系列一 單例模式

單例模式 主要用於保證乙個類只有乙個例項,對外提供乙個全域性的訪問點來獲取該例項。是所有設計模式中最簡單的模式。實現 c using system using system.collections.generic using system.linq using system.text namespa...

C 設計模式系列(一) 單例模式

在gof的 設計模式 可復用物件導向軟體的基礎 中一共講解了23種設計模式,我們在各種 和框架中或多或少的發現他們的影子,為了更好的掌握這些設計模式,我們將以c 的形式在博文中做乙個總結。一 單例模式 1.引言 單例模式是在各種設計模式中最基礎的乙個設計模式,因為只涉及到乙個類,所以也是最簡單的乙個...

設計模式系列 單例模式

單例模式 確保乙個類只有乙個例項,並提供乙個全域性訪問點。什麼情況下需要單例模式?一些類提供公共功能供別人呼叫,本身不會處理業務邏輯 類會被許多類和執行緒呼叫 單例模式的一些注意點 單例的生存期超長,會導致記憶體的持續占用。單例在多執行緒環境需要小心的處理執行緒互斥,進行資源保護。單例在類的繼承樹中...