單例模式:Singleton模式包含的角色只有一個省古,就是Singleton旱易。Singleton擁有一個私有構(gòu)造函數(shù),確保用戶無法通過new直接實(shí)例它杀怠。除此之外,該模式中包含一個靜態(tài)私有成員變量instance與靜態(tài)公有方法Instance()厅克。Instance方法負(fù)責(zé)檢驗(yàn)并實(shí)例化自己赔退,然后存儲在靜態(tài)成員變量中,以確保只有一個實(shí)例被創(chuàng)建证舟。
Singleton:定義一個GetInstance操作硕旗,允許客戶訪問他的唯一實(shí)例。GetInstance是一個靜態(tài)方法女责,主要作用是創(chuàng)建自己的唯一實(shí)例漆枚。
方法一:這使得代碼減少了許多,同時也解決了線程問題帶來的性能上損失抵知。Singleton類被聲明為sealed墙基,以此保證它自己不會被繼承,其次沒有了Instance的方法刷喜,將原來_instance成員變量變成publicreadonly碘橘,并在聲明時被初始化。通過這些改變吱肌,我們確實(shí)得到了Singleton的模式,原因是在JIT的處理過程中仰禽,如果類中的static屬性被任何方法使用時氮墨,.NETFramework將對這個屬性進(jìn)行初始化,于是在初始化Instance屬性的同時Singleton類實(shí)例得以創(chuàng)建和裝載吐葵。而私有的構(gòu)造函數(shù)和readonly(只讀)保證了Singleton不會被再次實(shí)例化规揪,這正是Singleton設(shè)計(jì)模式的意圖。不過這也帶來了一些問題温峭,比如無法繼承猛铅,實(shí)例在程序一運(yùn)行就被初始化,無法實(shí)現(xiàn)延遲初始化等凤藏。
方法二:這實(shí)現(xiàn)了延遲初始化奸忽,并具有很多優(yōu)勢堕伪。
單例模式使用場景:單例模式的使用自然是當(dāng)我們的系統(tǒng)中某個對象只需要一個實(shí)例的情況,例如:操作系統(tǒng)中只能有一個任務(wù)管理器,操作文件時,同一時間內(nèi)只允許一個實(shí)例對其操作等,既然現(xiàn)實(shí)生活中有這樣的應(yīng)用場景,自然在軟件設(shè)計(jì)領(lǐng)域必須有這樣的解決方案了(因?yàn)檐浖O(shè)計(jì)也是現(xiàn)實(shí)生活中的抽象)栗菜,所以也就有了單例模式了欠雌。