單例模式屬於物件建立型模式,其意圖是保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。對一些類來說,只有乙個例項是很重要的,雖然系統中可以有許多印表機,但卻只應該有乙個印表機假離線,只應該有乙個檔案系統和乙個視窗管理器,乙個數字濾波器只能有乙個a/d轉 換器,乙個會計系統只能專用於乙個公司。怎樣才能保證乙個類只有乙個例項並且這個例項易於被訪問,乙個全域性變數使得乙個物件可以被訪問,但它不能防止你實 例化多個物件,乙個更好的方法是讓類自身負責儲存他的唯一例項。這個類可以保證沒有其他例項可以被建立,並且它可以提供乙個訪問該例項的方法,這就是singleton模式。
實用性:在下面的情況下可以使用singleton模式。 l
當類只能有乙個例項而且客戶可以從乙個眾所周知的訪問點訪問它時。 l
當這個唯一例項應該是通過子類化可擴充套件的,並且客戶應該無需更改**就能使用乙個擴充套件的例項時。
例如:乙個產生隨機數的例子,整個應用程式中只需要乙個類的例項來產生隨機數,客戶端程式從類中獲取這個例項,呼叫這個例項的方法nextint(),公用的方法訪問需要進行同步,這是單例模式需要解決的同步問題。
參與者:singleton:定義乙個instance操作,允許客戶訪問它的唯一例項,instance是乙個類操作。可能負責建立自己的唯一例項。
協作關係:客戶只能通過singleton的instance操作訪問乙個singleton的例項。
使用singleton模式有許多優點:
1.對唯一例項的受控訪問,
2.縮小命名空間,
3.允許對操作和表示的精化,
4.允許可變數目的例項。
5.比類操作更靈活。
**:單例模式中需要解決的重要問題是方法的同步問題,同步的粒度有多大等。在本例子中同在獲得類的例項的時候使用了同步,**如下:
publicclasssingleton
publicvoidsetseed(intseed)
publicintnextint()
publicstaticsynchronizedsingleton getinstance()
returninstance; }
privaterandom generator;
privatestaticsingleton
instance; }
客戶端呼叫的**:
packagesingleton;
publicclassclient }
}總結:單例模式使得應用程式在執行時保持只能有乙個例項,在一些大的應用程式中,主程式只需要有乙個,因此需要使用單例模式
單例模式 singleton 解析例子
單例模式屬於物件建立型模式,其意圖是保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。對一些類來說,只有乙個例項是很重要的,雖然系統中可以有許多印表機,但卻只應該有乙個印表機假離線,只應該有乙個檔案系統和乙個視窗管理器,乙個數字濾波器只能有乙個a d轉 換器,乙個會計系統只能專用於乙個公司。怎...
Singleton 單例 模式
singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...
Singleton 單例 模式
今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...