一個對象隻能有一個執行個體,所有對象對它的引用都指向同一個記憶體位址
1. 懶漢式加載
2. 餓漢式加載
減少記憶體開支,因為隻有一個對象執行個體,特别是一個對象頻繁的建立和銷毀時
減少系統的性能開銷,當一個對象的産生需要比較多的資源時
單例模式可以避免對資源的多重占用,比如寫檔案操作
單例模式可以在系統設定全文通路點,優化和共享資源通路,例如由一個單例類去負責一個資料表的映射處理
單例模式一般沒有接口,擴充比較麻煩,接口對單例模式是沒有意義的,它要提供單一執行個體,而接口和抽象類是不能被執行個體化的.當然,在特殊情況下也可以實作,
這個看具體的環境而定
單例模式不利于測試,在并行開發環境中,單例模式沒有完成,沒法進行測試
單例模式與單一職責原則有沖突.一個類應該隻實作一個邏輯,而不關心它是否是單例的
要求生成唯一序列号的環境
在整個項目中需要一個共享通路點或共享資料
建立一個對象消耗的資源過多時,比如通路 IO 和資料庫
需要定義大量的靜态常量和靜态方法(這裡我其實沒太搞懂靜态方法和單例的差別在哪)