有次面試的時候直接**了,其中乙個問題是要我說單例模式的實現方式。當時直接答了懶漢和餓漢模式,然後又被問有沒有其他方式,效率會更高些的,簡直一臉的懵逼,回去後查了下,確實還有別的。
什麼是單例?----單例就是確保乙個類只有乙個例項,而且自行例項化,並向系統提供這個例項。單個例還可以擴充套件,就是多例模式。
有些經驗的,根據定義也知道怎麼實現,就是構造方法私有化,不讓外界例項化(當然反射技術來實現暫不考慮),然後自己例項化乙個並提供乙個靜態的方法將它丟擲,這就引出了我們都知道的兩種模式:1.懶漢模式 2.餓漢模式
懶漢模式:既然是懶漢,那就說明這傢伙比較懶,你問他要他才給你做,不要他就在那裡閒著。怎麼實現呢?
public class single public static single getinstance()else }}
這就是乙個簡單的單例,但是這樣並不安全,尤其是執行緒多的時候,可能會產生多個例項。然後改進下:
public class single
public synchronized static single getinstance()else
public static single getinstance()}}
return msingle;
}}
改進後就不會每次獲取例項都去檢查鎖了,只有第一次才會。
餓漢模式:餓漢嘛,自己就迫不及待的把例項做出來了,餓漢模式本身是執行緒安全的。但它不是懶載入的,例項一開始就被例項化了。
public class singlepublic synchronized static single getinstance()
}
靜態內部類模式:屬於懶載入,餓漢的公升級public class singleprivate single() {}
private static final single getinstance()
}多例模式(單例的變種)
//這裡採用餓漢的模式public class single {
private static int max_number = 3;
private static arraylistlist = new arraylist();
static {
for (int a = 0;a
如果需要使用到多例,那想必邏輯也會稍微複雜,這裡的**只是乙個簡單的實現,可以根據實際來編寫邏輯。
學習設計模式 單例模式
適用於 優點 缺點 1.懶漢式 public class singleton public static synchronized singleton getinstance return uniqueinstance 2.餓漢式 public class singleton public stat...
設計模式學習 單例模式
單例模式是一種常用的軟體設計模式。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。1.單例模式特點 2.單例模式作用 3.單例模式種類 a.餓漢式 b.懶漢式 c.懶漢式 ...
學習設計模式( ) 單例模式
定義 確保乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。型別 建立類模式 單例模式應該是23種設計模式中最簡單的一種模式了。它有以下幾個要素 單例模式現在主流推薦第一種雙重檢查型。以前流行的有根據例項化物件時機的不同有分為兩種 一種是餓漢式單例,一種是懶漢式單例。餓漢式單例在單例類被載...