程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 在C#中實現Singleton(1)

在C#中實現Singleton(1)

編輯:關於C語言

Singleton 設計模式的下列實現采用了 Design Patterns: Elements of Reusable Object-OrIEnted Software[Gamma95] 中所描述的解決方案,但對它進 行了修改,以便利用 C# 中可用的語言功能,如屬性:

using System;
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}

該實現主要有兩個優點:

• 由於實 例是在 Instance 屬性方法內部創建的,因此類可以使用附加功能(例如,對子 類進行實例化),即使它可能引入不想要的依賴性。

• 直到對象要 求產生一個實例才執行實例化;這種方法稱為"懶實例化"。懶實例化 避免了在應用程序啟動時實例化不必要的 singleton。

但是,這種實現的 主要缺點是在多線程環境下它是不安全的。如果執行過程的不同線程同時進入 Instance 屬性方法,那麼可能會創建多個 Singleton 對象實例。每個線程都會 執行下列語句,並決定必須創建新的實例:

if (instance == null)

解決此問題的方法有很多。一種方法是使用被稱為 Double-Check Locking[Lea99] 的技術。而 C# 與公共語言運行庫也提供了一種"靜態初始 化"方法,這種方法不需要開發人員顯式地編寫線程安全代碼,即可解決這 些問題。

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