單例設計模式

2021-08-28 20:28:29 字數 1877 閱讀 7634

1.餓漢式:類初始化時,會立即載入該物件,執行緒天生安全,呼叫效率高。(spring裡面的是餓漢式)

2.懶漢式: 類初始化時,不會初始化該物件,真正需要使用的時候才會建立該物件,具備懶載入功能。

3.靜態內部方式:結合了懶漢式和餓漢式各自的優點,真正需要物件的時候才會載入,載入類是執行緒安全的。

4.列舉單例: 使用列舉實現單例模式 優點:實現簡單、呼叫效率高,列舉本身就是單例,由jvm從根本上提供保障!避免通過反射和反序列化的漏洞, 缺點沒有延遲載入。

5.雙重檢測鎖方式(因為jvm本質重排序的原因,可能會初始化多次,不推薦使用)

天生執行緒安全(因為它一初始化就建立物件,其他執行緒只是讀而不是寫????如果寫的話會怎樣呢?也執行緒安全嗎?應該要在宣告物件的前面加上final修飾符吧)

//餓漢式

public class singletondemo01

public static singletondemo01 getinstance()

public static void main(string args)

}

輸出結果為true

//懶漢式

public class singletondemo02

//類初始化時,不會初始化該物件,真正需要使用的時候才會建立該物件。

private static singletondemo02 singletondemo02;

private singletondemo02()

//加上synchronized之後,每次只能有乙個執行緒進行訪問,效率就降低了

public synchronized static singletondemo02 getinstance()

return singletondemo02;

} public static void main(string args)

}

什麼是列舉(列舉這塊知識還是不清晰)

列舉本身是單例的,一般用於專案中定義常量。

enum userenum 

public integer getcode()

public void setcode(integer code)

public string getname()

public void setname(string name)

}public class testenum

}/使用列舉實現單例模式 優點:實現簡單、列舉本身就是單例,由jvm從根本上提供保障!避免通過反射和反序列化的漏洞 缺點沒有延遲載入

public class user

private static enum singletondemo04

public user getinstance()

} public static void main(string args)

}

public class singletondemo04 

執行雙重檢查是因為,如果多個執行緒同時了通過了第一次檢查,並且其中乙個執行緒首先通過了第二次檢查並例項化了物件,那麼剩餘通過了第一次檢查的執行緒就不會再去例項化物件。

這樣,除了初始化的時候會出現加鎖的情況,後續的所有呼叫都會避免加鎖而直接返回,解決了效能消耗的問題。

public singletondemo04 getinstance() }}

return singletondemo04;

}}

單例設計模式(餓漢單例設計模式 懶漢單例設計模式)

1.什麼是單例 單例的意思是乙個類永遠只存在乙個物件,不能建立多個物件。2.為什麼要用單例 開發中有很多的物件我們只需要乙個,例如虛擬機器物件,任務管理器物件 物件越多越佔記憶體,有時候只需要乙個物件就可以實現業務,單例可以節省記憶體空間。3.如何實現單例 單例的實現方式有 餓漢單例設計模式 通過類...

設計模式 單例設計模式

歷史 最早是建築學領域的模式,然後gof四人由其引申到編碼方面,總結了23種設計模式 設計模式 解決某一類事情最行之有效的方法 2.1 體現 餓漢式,保證物件的唯一性 class singleton 私有化建構函式禁止該類建立物件 private static singleton st new si...

設計模式 單例設計模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。單例設計模式 解決的問題 可以保...