設計模式—單例模式(轉)
看別人寫的設計模式 覺得很好。
引用別人的 自己就不造輪子了。。。。。
轉載 http://liuqing9382.iteye.com/blog/1441661
單例模式:
三個要點:
1.某個類只能有一個例項。
2.它必須自行建立這個例項;
3.它必須自行向外提供這個例項。
餓漢式:
public class Singleton{ private static Singleton singleton = new Singleton (); private Singleton (){} public Singleton getInstance(){ return singletion; } }
優點:
1.執行緒安全
2.在類載入的同時已經建立好一個靜態物件,呼叫時反應速度快
缺點:
資源效率不高,可能getInstance()永遠不會執行到,但執行該類的其他靜態方法或者載入了該類(class.forName),那麼這個例項仍然初始化
懶漢式: (懶載入的思想,用到才會初始化例項)
public class Singleton{ private static Singleton singleton = null; public static synchronized Singleton getInstance(){ if(singleton==null){ singleton = new Singleton(); } return singleton; } }
優點:
資源利用率高,不執行getInstance()就不會被例項,可以執行該類的其他靜態方法
缺點:
第一次載入時不夠快,多執行緒使用不必要的同步開銷大
比較:
餓漢式是執行緒安全的,在類建立的同時就已經建立好一個靜態的物件供系統使用,以後不再改變。
懶漢式如果在建立例項物件時不加上synchronized則會導致對物件的訪問不是執行緒安全的,
推薦使用第一種
假設多執行緒訪問的時候,執行緒1在在new Instence() 系統分配記憶體需要0.01秒時間 ,但就這這個0.01秒 又有其他的執行緒訪問了,這時候就要再次instance 還是為null 又要再次new
導致了執行緒不安全。
雙重檢測:
class Singleton4 { private Singleton4() {} public static Singleton4 instance = null; public static Singleton4 getInstance() { if (instance == null) { synchronized (Singleton4.class) { if (instance == null) { instance = new Singleton4(); } } } return instance; } }
優點:
資源利用率高,不執行getInstance()就不被例項,可以執行該類其他靜態方法
缺點:
第一次載入時反應不快,由於java記憶體模型一些原因偶爾失敗
靜態內部類:
class Singleton5 { private Singleton5() {} private static class SingletonHelp { static Singleton5 instance = new Singleton5(); } public static Singleton5 getInstance() { return SingletonHelp.instance; } }
優點:
資源利用率高,不執行getInstance()不被例項,可以執行該類其他靜態方法
缺點:
第一次載入時反應不夠快
相關文章
- [設計模式]單例設計模式設計模式單例
- 設計模式-單例模式設計模式單例
- [設計模式] 單例模式設計模式單例
- 設計模式 —— 單例模式設計模式單例
- 設計模式(單例模式)設計模式單例
- 設計模式——單例模式設計模式單例
- 設計模式--單例模式設計模式單例
- 設計模式 單例模式設計模式單例
- 設計模式-單例模式、多例模式設計模式單例
- 設計模式之單例設計模式設計模式單例
- 設計模式一(單例模式)設計模式單例
- 設計模式之☞單例模式設計模式單例
- Java設計模式–單例模式Java設計模式單例
- Java設計模式——單例模式Java設計模式單例
- Java設計模式--單例模式Java設計模式單例
- js設計模式--單例模式JS設計模式單例
- Java設計模式 | 單例模式Java設計模式單例
- 設計模式之單例模式設計模式單例
- Java設計模式【單例模式】Java設計模式單例
- 設計模式之---單例模式設計模式單例
- 設計模式(二)——單例模式設計模式單例
- PHP設計模式_單例模式PHP設計模式單例
- 設計模式系列-單例模式設計模式單例
- 設計模式(一)_單例模式設計模式單例
- 設計模式1——單例模式設計模式單例
- 設計模式(七):單例模式設計模式單例
- PHP設計模式——單例模式PHP設計模式單例
- 常用設計模式-單例模式設計模式單例
- Java設計模式-單例模式Java設計模式單例
- 設計模式-單例模式,觀察者模式設計模式單例
- JavaScript設計模式初探--單例設計模式JavaScript設計模式單例
- 設計模式總結 —— 單例設計模式設計模式單例
- 單例設計模式單例設計模式
- PHP 設計模式之單例模式PHP設計模式單例
- # Python設計模式 單例模式Python設計模式單例
- javascript設計模式一: 單例模式JavaScript設計模式單例
- C#設計模式——單例模式C#設計模式單例
- Javascript 設計模式之單例模式JavaScript設計模式單例