看别人寫的設計模式 覺得很好。
引用别人的 自己就不造輪子了。。。。。
單例模式:
三個要點:
1.某個類隻能有一個執行個體。
2.它必須自行建立這個執行個體;
3.它必須自行向外提供這個執行個體。
餓漢式:
優點:
1.線程安全
2.在類加載的同時已經建立好一個靜态對象,調用時反應速度快
缺點:
資源效率不高,可能getInstance()永遠不會執行到,但執行該類的其他靜态方法或者加載了該類(class.forName),那麼這個執行個體仍然初始化
懶漢式: (懶加載的思想,用到才會初始化執行個體)
資源使用率高,不執行getInstance()就不會被執行個體,可以執行該類的其他靜态方法
第一次加載時不夠快,多線程使用不必要的同步開銷大
比較:
餓漢式是線程安全的,在類建立的同時就已經建立好一個靜态的對象供系統使用,以後不再改變。
懶漢式如果在建立執行個體對象時不加上synchronized則會導緻對對象的通路不是線程安全的,
推薦使用第一種
假設多線程通路的時候,線程1在在new Instence() 系統配置設定記憶體需要0.01秒時間 ,但就這這個0.01秒 又有其他的線程通路了,這時候就要再次instance 還是為null 又要再次new
導緻了線程不安全。
雙重檢測:
優點:
資源使用率高,不執行getInstance()就不被執行個體,可以執行該類其他靜态方法
第一次加載時反應不快,由于java記憶體模型一些原因偶爾失敗
靜态内部類:
優點:
資源使用率高,不執行getInstance()不被執行個體,可以執行該類其他靜态方法
缺點:
第一次加載時反應不夠快