基本定義java
單例模式就是確保某一個類只有一個實例,而且提供一個全局訪問點。單例模式有以下幾個特色:安全
代碼實現性能
餓漢式spa
直接初始化靜態變量。這樣就保證了線程安全。線程
public class Singleton { private static Singleton singleton = new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return singleton; } }
懶漢式3d
按需加載. 配合synchronized來處理。也就是說將getInstance()方法變成同步方法code
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; } }
優勢對象
節約了系統資源。因爲系統中只存在一個實例對象,對與一些須要頻繁建立和銷燬對象的系統而言,單例模式無疑節約了系統資源和提升了系統的性能。
由於單例類封裝了它的惟一實例,因此它能夠嚴格控制客戶怎樣以及什麼時候訪問它。
缺點blog
因爲單例模式中沒有抽象層,所以單例類的擴展有很大的困難。
JDK源碼資源
懶漢式
java.lang.Runtim
餓漢式
java.lang.System