2. Singleton單件(建立型模式)
動機(Motivation)
在軟體系統中,經常有這樣一些特殊的類,必須保證它們
在系統中只存在一個例項,才能確保它們的邏輯正確性、
以及良好的效率。
如何繞過常規的構造器,提供一種機制來保證一個類只有
一個例項?
這應該是類設計者的責任,而不是使用者的責任。
意圖(Intent)
保證一個類僅有一個例項,並提供一個該例項的全
局訪問點。
——《設計模式》GoF
單執行緒Singleton模式的幾個要點
• Singleton模式中的例項構造器可以設定為protected以允
許子類派生。
• Singleton模式一般不要支援ICloneable介面,因為這可能
會導致多個物件例項,與Singleton模式的初衷違背。
• Singleton模式一般不要支援序列化,因為這也有可能導致
多個物件例項,同樣與Singleton模式的初衷違背。
• Singletom模式只考慮到了物件建立的管理,沒有考慮對
象銷燬的管理。就支援垃圾回收的平臺和物件的開銷來
講,我們一般沒有必要對其銷燬進行特殊的管理。
• 不能應對多執行緒環境:在多執行緒環境下,使用Singleton模
式仍然有可能得到Singleton類的多個例項物件。
Singleton模式擴充套件
• 將一個例項擴充套件到n個例項,例如物件池的實現。
• 將new 構造器的呼叫轉移到其他類中,例如多個
類協同工作環境中,某個區域性環境只需要擁有某
個類的一個例項。
• 理解和擴充套件Singleton模式的核心是“如何控制使用者
使用new對一個類的例項構造器的任意呼叫”。
推薦參考書
• 《設計模式:可複用面向物件軟體的基礎》GoF
• 《面向物件分析與設計》Grady Booch
• 《敏捷軟體開發:原則、模式與實踐》Robert C. Martin
• 《重構:改善既有程式碼的設計》Martin Fowler
• 《Refactoringto Patterns 》JoshuaKerievsky