設計模式 —— 單例模式, Singleton Patttern

參考資料:
《android 源碼設計模式解析與實戰》 - Capter2, P23
《Head First 設計模式》 - Capter5, P169

示例程序:

1 單例模式,又稱之爲單件模式,英文名爲Singleton Patttern
2 單例模式的定義:確保一個類只有一個示例,並提供一個全局訪問點。
3 什麼時候須要單例模式?
某個類有且只有一個對象。若是有多個實例,會致使不少問題:程序的行爲異常,資源使用過量,或者不一致的結果等。
單例模式經常使用來管理共享的資源,以及解決建立一個對象須要消耗的資源過多的問題。
常見的例子:數據庫鏈接池,線程池(ThreadPool),緩存(cache),對話框,處理偏好設備和註冊表對象,日誌對象,充當打印機、顯卡等驅動程序的對象,網絡請求。
4 相對於全局變量,單例模式的優勢?
單例模式提供一個和全局變量的全局訪問點,但沒有全局變量的缺點。
(1) 單例模式,延遲初始化,盡在須要時才建立對象。
全局變量,急切初始化,在程序一開始時就建立好了對象。極端狀況是,若是初始化時很是耗資源,可是程序執行的過程當中卻沒有用到它。
(2) 全局變量提供一個全局訪問,可是不能確保只能一個實例。全局變量容易形成命名空間污染(namespace)。
5 Java 1.2以前,垃圾收集器有個bug,會形成單件在沒有全局的引用時被看成垃圾清楚。Java1.2以後,bug修正,再也不須要一個全局引用來保護單件。
6 單例模式的特色:
(1)確保在多線程中單例模式的對象只有一個。
(2)確保單例模式的對象在反序列化時不會從新構建對象。
相關文章
相關標籤/搜索