C#單例模式(Singleton Pattern)實(shí)例教程
本文以實(shí)例形式講述了C#單例模式(Singleton Pattern)的實(shí)現(xiàn)方法,分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
一般來說,當(dāng)從應(yīng)用程序全局的角度來看,如果只允許類的一個(gè)實(shí)例產(chǎn)生,就可以考慮單例模式。
1.即時(shí)加載的單例模式
把類的實(shí)例賦值給類的一個(gè)靜態(tài)字段。
class Program
{
static void Main(string[] args)
{
Logger log = Logger.GetInstance();
log.WriteToFile();
Console.Read();
}
}
public class Logger
{
private static Logger logger = new Logger();
private Logger(){}
public static Logger GetInstance()
{
return logger;
}
public void WriteToFile()
{
Console.WriteLine("錯(cuò)誤被寫入文件了~~");
}
}
2.延遲加載的單例模式
直到調(diào)用類的靜態(tài)方法,才產(chǎn)生類的實(shí)例。
public class Logger
{
private static Logger logger = null;
private Logger(){}
public static Logger GetInstance()
{
if (null == logger)
{
logger = new Logger();
}
return logger;
}
public void WriteToFile()
{
Console.WriteLine("錯(cuò)誤被寫入文件了~~");
}
}
3.線程安全的單例模式
直到調(diào)用類的靜態(tài)方法,保證只有一個(gè)線程進(jìn)入產(chǎn)生類的實(shí)例。
public class Logger
{
private static Logger logger = null;
private static object lockObj = new object();
private Logger(){}
public static Logger GetInstance()
{
lock (lockObj)
{
if (logger == null)
{
logger = new Logger();
}
return logger;
}
}
public void WriteToFile()
{
Console.WriteLine("錯(cuò)誤被寫入文件了~~");
}
}
總結(jié):靜態(tài)單例類型的私有字段,私有構(gòu)造函數(shù),獲取單例的方法是構(gòu)成單例模式的3個(gè)必要元素。希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
C#設(shè)計(jì)模式之Mediator中介者模式解決程序員的七夕緣分問題示例
這篇文章主要介紹了C#設(shè)計(jì)模式之Mediator中介者模式解決程序員的七夕緣分問題,簡(jiǎn)單說明了中介者模式的定義并結(jié)合七夕緣分問題實(shí)例分析了中介者模式的具體使用技巧,需要的朋友可以參考下2017-09-09
DevExpress中GridControl列轉(zhuǎn)義的實(shí)現(xiàn)方法
這篇文章主要介紹了DevExpress中GridControl列轉(zhuǎn)義的實(shí)現(xiàn)方法,在項(xiàng)目開發(fā)中有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-08-08
C#中DataTable 轉(zhuǎn)實(shí)體實(shí)例詳解
這篇文章主要介紹了C#中DataTable 轉(zhuǎn)實(shí)體實(shí)例詳解,需要的朋友可以參考下2017-04-04
C#?wpf定義ViewModelBase進(jìn)行簡(jiǎn)化屬性綁定
綁定機(jī)制是wpf的核心,也是界面獨(dú)立的根本,尤其是使用了mvvm模式,本文主要介紹了wpf如何定義ViewModelBase進(jìn)行簡(jiǎn)化屬性綁定,需要的可以參考下2024-04-04
Unity中C#和Java的相互調(diào)用實(shí)例代碼
在unity中接入sdk或者定制一些功能時(shí),需要調(diào)用系統(tǒng)接口。安卓手機(jī)實(shí)際操作中,也就是Unity與android相互調(diào)用。我們?cè)赨nity中使用c#,android中使用java。2018-02-02
C#實(shí)現(xiàn)獲取程序路徑方法小結(jié)
這篇文章主要介紹了C#實(shí)現(xiàn)獲取程序路徑方法,實(shí)例分析了C#獲取文件路徑的各種常用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08

