設計模式-單例模式(Singleton)
阿新 • • 發佈:2018-12-16
單例模式
定義:
一個類有且僅有一個例項,並且自行例項化向整個系統提供
要點:
- 某個類只能有一個例項(類只提供私有的建構函式)
- 它必須自行建立這個例項(類定義中含有一個該類的靜態私有物件)
- 它必須自行向整個系統提供這個例項(該類提供了一個靜態的公有的函式用於建立或者獲取它本身的靜態私有物件)
構建方式:
- 懶漢方式:指全域性的單例例項在第一次被使用時構建
- 餓漢方式:指全域性的單例例項在類裝載時構建
示例:
package designPattern.singleton; /** * 餓漢式 * 這種方式比較常用,但容易產生垃圾物件 * 執行緒安全 * 優點:沒有加鎖,執行效率會提高 * 缺點:類載入時就初始化,浪費記憶體。 * @author sunlh * */ public class Singleton { private static Singleton singleton = new Singleton(); private Singleton () {}; public static Singleton getInstance() { return singleton; } }
package designPattern.singleton; /** * 懶漢式 * 雙檢鎖/雙重校驗鎖 * 執行緒安全 * 這種方式採用雙鎖機制,安全且在多執行緒情況下能保持高效能 * @author sunlh * */ public class Singleton { private volatile static Singleton singleton; private Singleton () {}; public static Singleton getInstance() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }