1. 程式人生 > >《Head First 設計模式》:單件模式

《Head First 設計模式》:單件模式

# 正文 ## 一、定義 單件模式確保一個類只有一個例項,並提供一個全域性訪問點。 **要點:** * 定義持有唯一單件例項的類變數。 * 私有化構造,避免其他類產生例項。 * 對外提供獲取單件例項的靜態方法。 ## 二、實現步驟 ### 1、建立單件類 #### (1)方式一:懶漢式 延遲建立單件例項。 **執行緒不安全:** ``` /** * 單件類(懶漢式、執行緒不安全) */ public class Singleton { /** * 唯一單件例項 */ private static Singleton uniqueInstance; /** * 私有構造 */ private Singleton() {} /** * 獲取單件例項 */ public static Singleton getInstance() { if (uniqueInstance == null) { // 延遲建立單件例項 uniqueInstance = new Singleton(); } return uniqueInstance; } } ``` **執行緒安全:** ``` /** * 單件類(懶漢式、執行緒安全) */ public class Singleton { /** * 唯一單件例項 */ private static Singleton uniqueInstance; /** * 私有構造 */ private Singleton() {} /** * 獲取單件例項(同步方法) */ public static synchronized Singleton getInstance() { if (uniqueInstance == null) { // 延遲建立單件例項 uniqueInstance = new Singleton(); } return uniqueInstance; } } ``` #### (2)方式二:餓漢式 “急切”建立單件例項。 ``` /** * 單件類(餓漢式) */ public class Singleton { /** * 唯一單件例項(“急切”建立單件例項) */ private static Singleton uniqueInstance = new Singleton(); /** * 私有構造 */ private Singleton() {} /** * 獲取單件例項 */ public static Singleton getInstance() { return uniqueInstance; } } ``` #### (3)方式三:雙檢鎖 ``` /** * 單件類(雙重檢查加鎖) */ public class Singleton { /** * 唯一單件例項 */ private volatile static Singleton uniqueInstance; /** * 私有構造 */ private Singleton() {} /** * 獲取單件例項 */ public static Singleton getInstance() { if (uniqueInstance == null) { synchronized (Singleton.class) { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } } } return uniqueInstance; } } ``` ### 2、使用單件類獲取唯一單件例項 ``` public class Test { public static void main(String[] args) { // 獲取單件例項 Singleton singleton = Singleton.getInstance(); System.out.println(singleton); Singleton singleton2 = Singleton.getInstance(); System.out.println(singleton2);