單例模式

單例模式

單例模式:Singleton模式包含的角色只有一個,就是Singleton。Singleton擁有一個私有構(gòu)造函數(shù),確保用戶無法通過new直接實例它。除此之外,該模式中包含一個靜態(tài)私有成員變量instance與靜態(tài)公有方法Instance()。Instance方法負(fù)責(zé)檢驗并實例化自己,然后存儲在靜態(tài)成員變量中,以確保只有一個實例被創(chuàng)建。


Singleton

Singleton:定義一個GetInstance操作,允許客戶訪問他的唯一實例。GetInstance是一個靜態(tài)方法,主要作用是創(chuàng)建自己的唯一實例。


方法一

方法一:這使得代碼減少了許多,同時也解決了線程問題帶來的性能上損失。Singleton類被聲明為sealed,以此保證它自己不會被繼承,其次沒有了Instance的方法,將原來_instance成員變量變成publicreadonly,并在聲明時被初始化。通過這些改變,我們確實得到了Singleton的模式,原因是在JIT的處理過程中,如果類中的static屬性被任何方法使用時,.NETFramework將對這個屬性進(jìn)行初始化,于是在初始化Instance屬性的同時Singleton類實例得以創(chuàng)建和裝載。而私有的構(gòu)造函數(shù)和readonly(只讀)保證了Singleton不會被再次實例化,這正是Singleton設(shè)計模式的意圖。不過這也帶來了一些問題,比如無法繼承,實例在程序一運行就被初始化,無法實現(xiàn)延遲初始化等。


方法二

方法二:這實現(xiàn)了延遲初始化,并具有很多優(yōu)勢。


單例模式使用場景:單例模式的使用自然是當(dāng)我們的系統(tǒng)中某個對象只需要一個實例的情況,例如:操作系統(tǒng)中只能有一個任務(wù)管理器,操作文件時,同一時間內(nèi)只允許一個實例對其操作等,既然現(xiàn)實生活中有這樣的應(yīng)用場景,自然在軟件設(shè)計領(lǐng)域必須有這樣的解決方案了(因為軟件設(shè)計也是現(xiàn)實生活中的抽象),所以也就有了單例模式了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容