[設計模式]1.Singleton 單件(建立型模式)

來源:互聯網
上載者:User

最近在學習設計模式,看的是李建忠(上海祝成科技進階培訓講師)的"C#物件導向設計模式縱橫談"的視頻教程,該教程屬於微軟MSDN提供的webcast系列教程之一,在veryCD可以下載。

下載連結:http://www.verycd.com/topics/148585/

 

每聽完一講,把實現的代碼做以注釋整理,分享出來,如有錯誤不當之處,請批評指正。

 

 

 

第1種實現方式

namespace Singleton
{
/// <summary>
/// 第1種實現方式
/// </summary>
public class Singleton1
{
/// <summary>
/// 私人構造器,限制外部進行執行個體構造
/// </summary>
private Singleton1()
{
}

/// <summary>
/// 編譯器在編譯代碼時會對代碼的順序作出微調,使用volatile就可以
/// 保證編譯器不會對下面作出微調
/// </summary>
private static volatile Singleton1 _instance;

/// <summary>
/// 輔助器,不參與真正的構造
/// </summary>
private static Object _lockHelper = new object();

/// <summary>
/// 此時作用的是屬性,不支援參數傳遞
/// 將屬性改寫為方法可支援參數傳遞
/// </summary>
public static Singleton1 Instance
{
get
{
//單線程不必使用double check
if (_instance == null)
{
//使用lock來避免多線程
lock (_lockHelper)
{
if (_instance == null)
{
_instance = new Singleton1();
}
//else
//{
// 如果該單例要實現參數傳遞,並將參數值傳遞給自身屬性,
// 那麼就將此屬性改成方法,在此else語句賦傳值
// 模式的擴充並不固定,可靈活處理
//}
}

}
return _instance;
}
}
}
}

 

 

 

第2種實現方式

namespace Singleton
{
/// <summary>
/// 第2種實現方式
/// 這種方式不支援參數的傳遞,但可以進行擴充
/// </summary>
public class Singleton2
{
private Singleton2()
{
}

public static readonly Singleton2 _instance = new Singleton2();
}

}

 

 

 

 

第3種實現方式

namespace Singleton
{
/// <summary>
/// 第3種實現方式,與第二種方法異曲同工
/// </summary>
public class Singleton3
{
private Singleton3()
{
}

/// <summary>
/// 1、靜態建構函式既沒有存取修飾詞,也沒有參數。
/// 2、在建立第一個類執行個體或任何靜態成員被引用時,.NET將自動調用靜態建構函式來初始化類。   
/// --也就是說我們無法直接調用靜態建構函式,也不可能知道靜態建構函式何時會被調用。   
/// 3、一個類只能有一個靜態建構函式。
/// 4、無參數的建構函式可以與靜態建構函式共存。
/// --儘管參數列表相同,但一個屬於類,一個屬於執行個體,所以不會衝突。
/// 5、最多隻運行一次。
/// 6、靜態建構函式不可以被繼承。
/// 7、如果沒有寫靜態建構函式,而類中包含帶有初始值設定的靜態成員,那麼編譯器會自動產生預設的靜態建構函式。
/// </summary>
static Singleton3()
{
_instance = new Singleton3();
}

/// <summary>
/// 靜態欄位一定只會在當前類的靜態構造器初始化之後才有效
/// 例如,在外部使用該欄位,編譯器一定會先執行靜態構造器
/// </summary>
public static readonly Singleton3 _instance;
}
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.