單例模式

單例模式 ， 也叫單子模式 ， 是一種常用的軟件設計模式 ， 屬於創建型模式的一種 。 在應用這個模式時 ， 單例對象的類必須保證只有一個實例存在 。 許多時候整個系統只需要擁有一個的全局對象 ， 這樣有利於我們協調系統整體的行爲 。 比如在某個服務器程序中 ， 該服務器的配置信息存放在一個文件中 ， 這些配置數據由一個單例對象統一讀取 ， 然後服務進程中的其他對象再通過這個單例對象獲取這些配置信息 。 這種方式簡化了在複雜環境下的配置管理 。 實現單例模式的思路是 ： 一個類能返回對象一個引用 （ 永遠是同一個 ） 和一個獲得該實例的方法 （ 必須是靜態方法 ， 通常使用getInstance這個名稱 ） ； 當我們調用這個方法時 ， 如果類持有的引用不爲空就返回這個引用 ， 如果類保持的引用爲空就創建該類的實例並將實例的引用賦予該類保持的引用 ； 同時我們還將該類的構造函數定義爲私有方法 ， 這樣其他處的代碼就無法通過調用該類的構造函數來實例化該類的對象 ， 只有通過該類提供的靜態方法來得到該類的唯一實例 。 單例模式在多線程的應用場合下必須小心使用 。 如果當唯一實例尚未創建時 ， 有兩個線程同時調用創建方法 ， 那麼它們同時沒有檢測到唯一實例的存在 ， 從而同時各自創建了一個實例 ， 這樣就有兩個實例被構造出來 ， 從而違反了單例模式中實例唯一的原則 。 解決這個問題的辦法是爲指示類是否已經實例化的變量提供一個互斥鎖 （ 雖然這樣會降低效率 ） 。