單例模式的幾種寫法

2021-10-04 01:27:38 字數 1196 閱讀 8677

單例模式在《設計模式》中的定義為「保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

餓漢式在類裝載時便完成例項化,注意:單例模式的建構函式都是私有的。

public

class

hungryman

public

static hungryman getinstance()

}

懶漢式如果要保證執行緒安全,則要在getinstance()方法上加上synchronized關鍵字,並且還要在內部判斷是否已經建立過例項。不過這樣效率低,每次都要獲取和釋放鎖。

public

class

lazyman

public

synchronized

static lazyman getinstance()

return instance;

}}

雙重檢測即優化版的懶漢式,不同的是將synchronized放在了方法內部,通過雙重檢測提公升了效率。

為什麼要使用volatile?因為物件的建立不具備原子性,所以要避免其重排序而導致空指標,同時也保證了可見性。

public

class

doublecheck

public

static doublecheck getinstance()

}}return instance;

}public

static

void

main

(string[

] args)

}

靜態內部類中定義乙個靜態常量的例項,放在常量池中,這樣就可以由jvm保證只生成乙個例項。

public

class

staticinterior

private

static

class

singletoninstance

public

static staticinterior getinstance()

}

最簡單,也是最推薦使用的

public

enum enumsingleton

單例模式幾種寫法

1.餓漢式 public class singleton public static singleton getinstance 2.懶漢式 public class singleton 雙層檢測鎖 public static singleton getinstance return instanc...

單例模式的幾種寫法

所謂單例模式就是確保某乙個類只有乙個例項,並且提供乙個全域性訪問點。例如 執行緒池 快取 對話方塊等等 1 餓漢模式 保證執行緒安全 public class singleton public static singleton getinstance 2 懶漢模式 不保證執行緒安全 public c...

單例模式的幾種寫法

1.懶漢式 public class singleinstance1 private static singleinstance1 instance public static singleinstance1 getinstance return instance 該程式缺點是執行緒不安全 publ...