###Silngleton Pattern 類圖 單例模式很是簡單,基本沒有什麼類之間的關係,就不畫圖了,保證某個類生成的實例只有一個便可。java
###定義安全
###關於單例模式多線程
/* *「懶漢式」寫法,即等要用了再去實例化實例對象,而不是應用一啓動就實例化好放在容器中。 */ public class Singleton { private Singleton(); private static Singleton instance; public static getSingleton(){ if(instance==null){ instance = new Sinleton(); } return instance; } }
//雙重檢查鎖的寫法,由於使用了volatile關鍵字,須要jdk1.4以上 public class Singleton { private Singleton(); private static volatile Singleton instance; public static getSingleton(){ if(instance==null){ synchronized (Singleton.class){ if(instance==null){ instance = new Sinleton(); } } } return instance; } } /** * 「餓漢式」的寫法,由於沒用到同步鎖,因此後期效率最高。 **/ public class Singleton { private Singleton(); private static Singleton instance = new Singleton(); public static getSingleton(){ return instance; } }
其實所謂「懶漢式」與「餓漢式」的寫法,只是區別在初始化的時機而已。「餓漢式」寫法由jvm保證一應用啓動時只實例化一個對象,因爲多了一步實例化操做,應用啓動會稍微慢點。而「懶漢式」因爲是在應用啓動後實例對象,因此要考慮多線程併發的狀況。對於不是很大的應用,我的偏向於「餓漢式」,畢竟啓動的時候多花點時間啓動,換來後期運行的安全與效率也是值得的。誰沒事每天重啓生產上的程序啊(╯‵□′)╯︵┻━┻ 。併發