單例模式,屬於建立型別的一種常用的設計模式。它的目的就是為了建立的類在當前程序中只有乙個例項。
從定義可以看出,使用單例模式的目的無非就是下面兩個:
這種方式不是單例模式,但可以滿足需求,在正式生產中也會經常用到。
**
注意:這裡的public static class singletonsample1
}
++_counter
其實存在高併發問題,嚴格上應該用interlocked.increment(ref _counter)
的方式,由於我們主要講的是單例模式並且簡單且能演示效果,所以故意忽略了這一點。下同
優點缺點這是最簡單的一種單例模式,也是比較常用的一種方式,可在正式生產中使用。
**
優點public sealed class singletonsample2
public static singletonsample2 instance
}public int increasecount()
}
缺點以上兩種方式都存在第一次載入時,資源浪費的問題,但在記憶體資源越來越便宜的今天,通常這種浪費是可以接受的,因此也不必過於糾結這種浪費。當然,在條件允許的情況下,能優化還是要優化的。
該方式是改進過程中的過渡階段,不可用於生產。
**
優點public class singletonsample3
public static singletonsample3 instance
return _instance;}}
public int increasecount()
}
缺點該方式也是改進過程中的過渡階段,不可用於生產。
**
public class public class singletonsample4
public static singletonsample4 instance
return _instance;}}
}public int increasecount()
}
優點缺點
5. 單例模式四
著名的雙檢鎖模式,完美解決問題,可用於生產。
**
public class singletonsample5
public static singletonsample5 instance}}
return _instance;}}
public int increasecount()
}
優點缺點.net支援的一種優雅版本的實現方式,前面講了那麼多其實就是為了引出該方式,強烈建議使用該版本。
**
優點public class singletonsample6
public static singletonsample6 instance
}public int increasecount()
}
缺點泛型版本,是否使用視情況而定。
**
優點public class singletonsamplebasewhere tsingleton : class
public static tsingleton instance
}}public class singletonsample7 : singletonsamplebase
public int increasecount()
}
缺點最後舉的乙個用單例模式實現sqlhelper的例子,重點是為了突出相對於靜態類,例項類在多型擴充套件方面的優勢,其實如果沒有類似這種擴充套件需求,靜態類就足以應付絕大多數的需求。
單例模式實現方式如此之多,但實際上大多數情況需要使用單例的時候都可以用靜態類實現,比如一些工具類,而其他場景直接用單例模式五或者單例模式六即可,著名的雙檢索其實也是大可不必的,畢竟跟單例模式五相比,體現不出任何優勢,還更容易出錯。
原始碼鏈結
設計模式 單例模式
單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...
設計模式 單例模式
class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...
設計模式 單例模式
單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...