1.定義
保證一個(gè)類(lèi)僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。
2.適用性
1)當(dāng)類(lèi)只能有一個(gè)實(shí)例而客戶可以從一個(gè)眾所周知的訪問(wèn)點(diǎn)訪問(wèn)它時(shí)。
2)當(dāng)這個(gè)唯一實(shí)例應(yīng)該是通過(guò)子類(lèi)化可擴(kuò)展的,并且客戶應(yīng)該無(wú)需更改代碼就能使用一個(gè)擴(kuò)展的實(shí)例時(shí)。
3.結(jié)構(gòu)
圖1 單例模式類(lèi)圖
注:
Singleton:定義一個(gè)Instance操作,允許客戶訪問(wèn)它的唯一實(shí)例。Instance是一個(gè)類(lèi)操作(C#中為靜態(tài)方法),Singleton負(fù)責(zé)創(chuàng)建它自己的唯一實(shí)例。
4.實(shí)現(xiàn)方法
1)經(jīng)典模式
靜態(tài)變量uniqueInstance存儲(chǔ)唯一實(shí)例。公有靜態(tài)方法GetInstance提供訪問(wèn)SingletonFirst的全局訪問(wèn)點(diǎn),由于除了GetInstance方法外,類(lèi)的成員均為私有的,所以GetInstance提供的為唯一訪問(wèn)方式。在GetInstance()方法中,對(duì)uniqueInstance是否為null做了判斷,因此使得對(duì)象只能被實(shí)例化一次。
1 public class SingletonFirst 2 { 3 private static SingletonFirst uniqueInst