「單例模式」是一種設計模式,在記憶體中只有一個實例,換句話說就是只有被實例化一次、只有被 new 一次。
這樣的好處就是能夠節省記憶體空間、避免重複的建立和釋放物件,不只避免重複資源占用,還可以提高性能、讓該物件在全域都能使用。
而單例模式又有分成以下兩種模式:
要使用時只要取得靜態的自己就可以了
因為是要「單例」,所以我們把建構子設為 private,之後在實例化時會拋出下面的錯誤,就不會忘記而傻傻的和平常一樣 new Singleton()
因為 C# 有非常多的語法糖,所以貪婪單例模式可以被簡化成下面這樣
而懶惰單例模式因為在多執行緒時可能同時實例化,所以寫起來比較複雜,那就讓我們下節課再說囉~
這樣的好處就是能夠節省記憶體空間、避免重複的建立和釋放物件,不只避免重複資源占用,還可以提高性能、讓該物件在全域都能使用。
而單例模式又有分成以下兩種模式:
- 貪婪單例模式(Greed Singleton): 一開始就實例化物件
- 懶惰單例模式(Lazy Singleton): 實際使用到時才實例化物件
public class Singleton
{
private static Singleton _instance = new Singleton();
private Singleton()
{
}
public static Singleton Instance
{
get { return _instance; }
}
}
要使用時只要取得靜態的自己就可以了
Singleton singleton = Singleton.Instance;
因為是要「單例」,所以我們把建構子設為 private,之後在實例化時會拋出下面的錯誤,就不會忘記而傻傻的和平常一樣 new Singleton()
Cannot access private constructor 'Singleton()' here
因為 C# 有非常多的語法糖,所以貪婪單例模式可以被簡化成下面這樣
public class Singleton
{
public static Singleton Instance { get; } = new();
private Singleton()
{
}
}
而懶惰單例模式因為在多執行緒時可能同時實例化,所以寫起來比較複雜,那就讓我們下節課再說囉~
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com