設計模式系列 單例模式的7種寫法

2022-07-05 15:36:10 字數 1979 閱讀 8098

單例模式是一種常用的軟體設計模式,在他的核心結構中只包含乙個被稱為 單例的特殊類。通過單例模式可以保證系統只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。 

singletom類,定義乙個getinstance操作,允許客戶訪問他的唯一例項,getinstance是乙個靜態方法,主要負責建立自己的唯一例項。

public class singleton
public static singleton getinstance()

}

優點:在類載入時就完成了物件的初始化,所以類載入比較慢,但是獲取物件的速度比較快。

缺點:在類裝載的時候就完成例項化,沒有達到lazy loading的效果。如果從始至終從未使用過這個例項,則會造成記憶體的浪費。

public class singleton
public static singleton getinstance() 

return singleton;

} }

優點:這種寫法起到了延遲載入的效果,但是只能在單執行緒下使用。

缺點:如果在多執行緒下,乙個執行緒進入了if(singleton == null )判斷語句塊,還未來得及往下執行,另乙個執行緒也通過了這個判斷語句,這時便會產生多個例項。所以在多執行緒環境下不可以使用這種方式。

public class singleton 

}return singleton;

}}

或者

public class singleton 

public synchronized static singleton getinstance()

return singleton;

}}

優點:解決了上面執行緒不安全的問題

缺點:效率太低,每個執行緒在想獲得類的例項時候,執行getinstance()方法都要進行同步,而其實這個方法只執行一次例項化**六夠了,後面的想獲得該例項,直接return就就好了。方法進行同步效率太低。

public class singleton }}

return singleton;

}}

優點:執行緒安全、延遲載入、效率較高。

這種寫法在getinstance()方法中進行了兩次空判斷,第一次是為了避免不必要的同步,第二次是在singleton為空的情況下才建立例項。dcl雖然在一定程度上解決了資源的消耗和多餘的同步,執行緒安全等問題,但是在某些情況下會出現dcl失效。有些書中建議使用靜態內部類單例模式來**dcl。

public class singleton 

private static class singletonholder

}

載入乙個類時,其內部的類不會同時被載入,當且僅當某個靜態成員(靜態成員變數、構造方法、靜態方法)被呼叫時才去載入。第一次載入singleton時並不會初始化singleton,只有第一次呼叫getinstance()方法時才會載入singletonholder,並且初始化singleton,這樣不僅能夠保證執行緒的安全性也能保證singleton類的唯一性。推薦使用中這種方式。

public enum singleton

}

優點:通過singleton.instance來訪問,比較方便,執行緒安全,防止反序列化建立新的物件,

缺點:失去了一些類的特性,沒有延遲載入,可讀性差

public class singletonmanager 

}public static object getservice(string key)

}

用singletonmanager將多個單例統一進行管理,使用時根據key獲取對應的例項,這種方式可以管理多種型別的單例,並且在使用時可以通過統一的介面進行獲取操作,降低了使用者的使用成本,遮蔽了內部實現細節,降低了耦合度。 

白話設計模式之單例模式(7種寫法)

學習設計模式的時候 往往第乙個就是單例模式,啥是單例模式呢?接下來我就為大家梳理一下7種寫法 1.定義 ensure a class has only one instance,and provide a global point of access to it.確保某乙個類只有乙個例項,而且自行例...

單例模式的7種寫法

在介紹單例模式的寫法之前,我們有必要了解一下什麼是單例模式。單例模式是一種常用的軟體設計模式,在他的核心結構中只包含乙個被稱為 單例的特殊類。通過單例模式可以保證系統只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的...

單例模式的7種寫法

program singleton description 懶漢模式,單例例項在第一次使用時進行建立,非執行緒安全 author mr.superbeyone create 2018 09 30 09 15 public class singletondemo1 單例物件 private stati...