基本定義 單例模式就是確保某一個類只有一個實例,並且提供一個全局訪問點。單例模式有如下幾個特點: 它只有一個實例。 它必須要自行實例化。 它必須自行向整個系統提供訪問點。 代碼實現 餓漢式 直接初始化靜態變數。這樣就保證了線程安全。 public class Singleton { private ...
基本定義
單例模式就是確保某一個類只有一個實例,並且提供一個全局訪問點。單例模式有如下幾個特點:
- 它只有一個實例。
- 它必須要自行實例化。
- 它必須自行向整個系統提供訪問點。
代碼實現
餓漢式
直接初始化靜態變數。這樣就保證了線程安全。
public class Singleton { private static Singleton singleton = new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return singleton; } }
懶漢式
按需載入. 配合synchronized來處理。也就是說將getInstance()方法變成同步方法
public class LazySingleton { private static volatile LazySingleton lazySingleton; private LazySingleton(){ } public static LazySingleton getInstance(){ if(lazySingleton == null){ synchronized(LazySingleton.class){ lazySingleton = new LazySingleton(); } } return lazySingleton; } }
優點
節約了系統資源。由於系統中只存在一個實例對象,對與一些需要頻繁創建和銷毀對象的系統而言,單例模式無疑節約了系統資源和提高了系統的性能。
因為單例類封裝了它的唯一實例,所以它可以嚴格控制客戶怎樣以及何時訪問它。
缺點
由於單例模式中沒有抽象層,因此單例類的擴展有很大的困難。
JDK源碼
懶漢式
java.lang.Runtim
餓漢式
java.lang.System