我的在CSDN上的BLOG:http://blog.csdn.net/feb13/article/details/7851986java
如下是讀《設計模式——可複用面向對象軟件的基礎》的讀書筆記。設計模式
SINGLETON 單例 ide
一、 意圖.net
保證一個類僅有一個實例,並提供一個反問它的全局訪問點。設計
二、 適用性code
在下面狀況下可使用Singleton模式對象
三、 結構blog
四、 參與者get
Singleton —— 定義一個instance操做,容許客戶訪問它的惟一實例。Instance是一個靜態方法。——可能負責建立它本身的惟一實例。it
五、 協做
客戶只能經過Singleton的instance方法訪問一個Singleton的實例。
六、 效果
Singleton模式有許多優勢:
1) 對惟一實例的受控訪問。由於Singleton類封裝它的惟一實例,因此它能夠嚴格控制的客戶怎樣以及什麼時候訪問它。
2) 縮小命名空間。Singleton模式是對全局變量的一種改進。它避免了那些存儲惟一實例的全局變量污染命名空間。
3) 容許可變數目的實例。這個模式使得你易於改變你的想法,並容許Singleton類的多個實例。此外,你能夠用相同的方法來控制應用所使用的實例的數目。只容許訪問Singleton實例的操做須要改變。
4) 比類操做更靈活。另外一種封裝單例功能的方式是使用類操做。
七、 實現
下面是使用Singleton模式時因此考慮的實現問題:
1) 保證一個惟一的實例。Singleton模式使得這個惟一實例是類的通常實例,但該類被寫成只有一個實例能被建立。作到這一點的一個經常使用方法是將建立這個實例的操做隱藏在一個類操做後面,由它保證只有一個實例被建立。
2) 建立Singleton類的子類。主要問題與其說是定義子類不如說是創建它的惟一實例,這樣客戶就可使用它。事實上,指向單件實例的變量必須用子類的實例進行初始化。
八、 代碼示例
Singleton
package com.examples.pattern.singleton; publicclass Singleton { privatestatic Singleton sing; private Singleton(){ } publicstatic Singleton getInstance(){ if(sing == null){ sing = new Singleton(); } returnsing; } }
Client
package com.examples.pattern.singleton; publicclass Client { publicstaticvoid main(String[] args) { Singleton sing = Singleton.getInstance(); Singleton sing2 = Singleton.getInstance(); System.out.println(sing); System.out.println(sing2); } }