學習設計模式之單例模式

單例模式(Singleton Pattern)

其定義爲:Ensure a class has only one instance , and provide a global point of access to it.

單例模式的通用類圖爲:

單例模式的優點:

1、由於單例模式在內存中一個實例,減少了內存開支,特別是對一個對象需要頻繁的創建、銷燬時,而且創建或者銷燬時性能又無法優化,單例模式很適用。

2、由於單例模式只生成一個實例,所以減少了系統開銷,當一個對象產生需要比較多的資源時,如讀取配置,產生其他的依賴對象時,則可以在啓動的時候創建一個單例對象來解決。

3、單例模式可以避免對資源的多重佔用,因只有一個實例在內存中。

4、單例模式可以在系統中設置全局的訪問點,優化和共享資源訪問。

單例模式的缺點:

1、單例模式一般沒有接口,擴展很困難。

2、單例模式對測試時不利的,在並行開發環境中,如果單例模式還沒有完成,是不能進行測試的。

3、單例模式與單一職責原則有衝突。

單例模式的注意事項:

       在高併發情況下,需要注意單例模式的線程同步問題。如下:

public class Singleton{
        private static Singleton singleton = null;
        private Singleton(){}
        public static Singleton getSingleton(){
                if(singleton == null){
                     singleton = new Singleton();
               }
                return singleton;
}
}

該段代碼會出現多個實例:如一個線程A執行到singleton = new Singleton();單還沒有獲取對象,第二個線程B也執行到singleton == null,那麼線程B也將進入if語句中獲得一個實例,,這樣在內存中就出現了兩個實例。解決這個線程不安全的方法可以在方法前加上關鍵字synchronized,或者在方法中增加synchronized。


發佈了36 篇原創文章 · 獲贊 20 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章