程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> C#實現Singleton的兩種方法的比較

C#實現Singleton的兩種方法的比較

編輯:.NET實例教程

Singleton設計模式可以在應用程序創建一個唯一的全局對象,也就是說,這個對象只能被實例化一次。 應用程序中的窗口管理器或者是數據庫連接池等,都是Singleton模式的典型應用。

運用C#語言可以很方便地實現Singleton模式,然而同樣是實現Singleton模式,由於實現方式的不同,運行效果也會有所不同。下面分別說明並比較C#實現Singleton模式的兩種方法:

C#特有的方式實現Singleton(方式1)



/**//// <summary>
/// 單鍵模式的簡單實現方式
/// </summary>
public sealed class SampleSingleton1
{
private int m_Counter = 0;

private SampleSingleton1()
{
Console.WriteLine("初始化SampleSingleton1。");
}

public static readonly SampleSingleton1 Singleton = new SampleSingleton1();

/**//// <summary>
/// 調用次數計數器
/// </summary>
public void Counter()
{
m_Counter ++;
}
}
說明一下,sealed關鍵字保證了該單鍵類不會被繼承,readonly關鍵字保證了Singleton實例入口為只讀。

傳統方式實現Singleton(方式2)

之所以稱為傳統方式,是因為C++和Java都是采用的這種方式,代碼如下:

/**//// <summary>
/// 單鍵模式的傳統實現方式
/// </summary>
public class SampleSingleton2
{
// 注意:公用變量最好使用volatile關鍵字,原因參看MSDN
private static volatile SampleSingleton2 m_Instance = null;

private int m_Counter = 0;

private SampleSingleton2()
{
Console.WriteLine("初始化SampleSingleton2。");
}

/**//// <summary>
/// 獲取單鍵實例
/// </summary>
public static SampleSingleton2 Singleton
{
get
{
if (m_Instance == null)
{
lock (typeof(SampleSingleton2))
{
if (m_Instance == null)
{
m_Instance = new SampleSingleton2();
}
}
}

return m_Instance;
}
}

/**//// <summary>
/// 調用次數計數器
/// </summary>
public void Counter()
{
m_Counter ++;
}
}

上面的代碼使用了volatile關鍵字和lock關鍵字來保證正確創建(即只創建一次)以及正確獲取實例。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved