1、意圖
保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
2、工作原理
用一個特殊方法來實例化所需的對象。其中最關鍵的就是這個方法:調用這個方法時,檢查對象是否已經實例化。如果已經實例化,該方法僅返回對該對象的一個引用。如果尚未實例化,該方法實例化該對象並返回對此新實例的一個引用。爲了確保這是實例化此類型對象的唯一方法,將這個這個類的構造函數定義爲保護或者私有的。
3、問題
幾個不同的客戶對象需要引用同一對象,而且希望確保這種類型的對象數目不超過一個。
4、解決方案
保證一個實例。
5、通用結構
6、參與者
Singleton:定義一個Instance操作,允許客戶訪問它的唯一實例。
7、協作
Client對象只能通過Instance方法創建Singleton實例。
8、效果
Client對象無需操心是否已存在Singleton實例,這是由Singleton自己控制的。
9、實現
- 添加一個類的私有的靜態成員變量,引用所需的對象(初值爲null)。
- 添加一個公共靜態方法,它在成員變量的值爲null時實例化這個類(並設置成員變量的值),然後返回該成員變量的值。
- 將構造函數的狀態設置爲保護或者私有,從而防止任何人直接實例化這個類。