C#設計模式:單例模式
阿新 • • 發佈:2017-11-28
由於 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 classAnotherSingleton { private static readonly AnotherSingleton _instance = new AnotherSingleton(); static AnotherSingleton() { } private AnotherSingleton() { } public static AnotherSingleton Instance {get { return _instance; } } }
具體方法是加入一個靜態的構造函數,靜態函數的作用在於初始化類級別的靜態屬性或字段,這種方法完美的解決了鎖帶來的性能損耗問題同時又實現了單例。
我的原則是有一個好用的就沒必要去展示其他不好用的例子了,用這個就夠了。
C#設計模式:單例模式