單例設計模式是一種很常見的設計模式設計模式
1.單例設計模式保證一個類只有一個實例。
2.要提供一個訪問該類對象實例的全局訪問點。安全
對一些類來講,只有一個實例是很重要的。例如不少時候對於某個系統只須要擁有一個全局對象,這樣有利於咱們協調系統的總體行爲。
再好比說某個服務器程序中,該服務器的配置信息存放在一個文件中,這些配置數據由一個單例對象統一讀取,而後服務進程中的其餘對象
再經過這個單例對象獲取這些配置信息。從而簡化了在比較複雜的環境下配置管理。
經過上面的介紹,咱們能夠知道單例模式最重要的就是要保證一個類只有一個實例而且這個類易於被訪問,那麼要怎麼作才能保證一個類具備一個實例呢?一個全局變量使得一個對象能夠被訪問,可是這樣作卻不能防止你實例化多個對象。
一個更好的辦法就是,讓該類自身負責保存它的惟一實例。而且這個類保證沒有其餘的實例能夠被建立。
怎樣保證一個對象的惟一總結以下:服務器
1.爲了不其它程序過多的創建該類的對象,先禁止其它程序創建該類對象實例(將構造器私有化)
2.爲了方便其它程序訪問該類的對象,只好在本類中自定義一個對象,由可知該對象是static的,並對外提供訪問方式。
/// <summary> /// 單列模式一(餓漢式) /// </summary> public class Tests { private static Tests tests = new Tests(); private Tests() { } public static Tests GetTests() { return tests; } }
/// <summary> /// 單列模式二(懶漢式) /// </summary> public class Test { private Test() { } private static volatile Test test = null; public static Test GetTest() { if (test == null) { test = new Test(); } return test; } }
1.餓漢式這種方式加載類對象,咱們稱做:預先加載方式。對象預先加載,線程是安全的,在類建立好的同時對象生成,調用得到對象實例的方法反應速度快,代碼簡練。
2.懶漢式這種方式加載類對象,咱們稱做:延遲加載方式。對象延遲加載,效率高,只有在使用的時候才實例化對象,但若設計不當線程會不安全,代碼相對於餓漢式複雜,第一次加載類對象的時候反應不快。spa
原文連接:https://blog.csdn.net/weixin_43258908/article/details/88572455.net