1. 程式人生 > >C#設計模式:單例模式

C#設計模式:單例模式

由於 style 屬性 public readonly 靜態 don 但是 應該

在c#中的單例模式是指在一個AppDomain中只會存在一個經過實例化的對象。單例模式的作用的避免創建更多本來不用創建的對象,因為有一些對象在使用上沒有必要創建那麽多,一個就夠了。單例模式實現起來的話要遵循一下幾個特點:

. 單例類都只有一個private的無參構造函數
. 類聲明為sealed(不是必須的)
. 類中有一個靜態變量保存著所創建的實例的引用
. 單例類會提供一個靜態方法或屬性來返回創建的實例的引用(eg.GetInstance)

根據這幾個特點,首先是方法1:

 public class Singleton
    {
        private static  Singleton _instance;

        
private Singleton() { } public static Singleton Instance => _instance ?? (_instance = new Singleton()); }

這樣,調用Singleton的靜態屬性Instance可以獲取這個對象的唯一的實例,但是在多線程訪問中由於該操作不是原子的,還是會可能創建多個實例,所以應該在這個靜態屬性的邏輯中加入鎖(lock),這樣一來,問題解決了,但是鎖對性能的損耗不能忽視,於是,又出現了沒有鎖的並且性能較好的一種方法:

 public class
AnotherSingleton { private static readonly AnotherSingleton _instance = new AnotherSingleton(); static AnotherSingleton() { } private AnotherSingleton() { } public static AnotherSingleton Instance {
get { return _instance; } } }

具體方法是加入一個靜態的構造函數,靜態函數的作用在於初始化類級別的靜態屬性或字段,這種方法完美的解決了鎖帶來的性能損耗問題同時又實現了單例。

我的原則是有一個好用的就沒必要去展示其他不好用的例子了,用這個就夠了。

C#設計模式:單例模式