單例模式1:
單線程一
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 單例設(shè)計(jì)模式寫法
{
/// <summary>
/// 單例模式一 單線程一
/// </summary>
public class Singleton //1:定義一個(gè)public類
{
private static Singleton instance; //2:定義一個(gè)私有的靜態(tài)變量來(lái)保持類的實(shí)例
private Singleton() { } //3:定義一個(gè)私有的靜態(tài)構(gòu)造函數(shù),使外界不能訪問(wèn)
public static Singleton Instance //4:定義一個(gè)public靜態(tài)的方法暑始,提供一個(gè)全局訪問(wèn)點(diǎn),同時(shí)也可以定義共有屬性來(lái)提供全局訪問(wèn)點(diǎn)
{
get { return instance; } //5:返回類的實(shí)例
}
static Singleton() //6:靜態(tài)無(wú)參構(gòu)造函數(shù)
{
if (instance == null) //7:判斷類的實(shí)例是不是不存在為空
{
instance = new Singleton(); //8:為它創(chuàng)建一個(gè)實(shí)例
}
}
/*【單線程 說(shuō)明:】
上面的單例模式的實(shí)現(xiàn)是有問(wèn)題的烁峭,
當(dāng)多個(gè)用戶或者方法同時(shí)訪問(wèn)的時(shí)候风宁,
便會(huì)出現(xiàn)多個(gè)用戶同時(shí)拿到了instance==null的結(jié)果,
這個(gè)明顯不是我們想要的笋鄙,因此岭佳,我們應(yīng)該通過(guò)一個(gè)鎖來(lái)互斥這個(gè)方法,
當(dāng)很多線程同時(shí)訪問(wèn)的時(shí)候世蔗,只允許一個(gè)線程進(jìn)入到代碼中執(zhí)行端逼,
而其他的便只能處于掛起的狀態(tài)。具體的解決多線程的代碼請(qǐng)看后面我的分享凸郑。
*/
}
}