Singleton模式学习
生活随笔
收集整理的這篇文章主要介紹了
Singleton模式学习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
動機(Motivation)
在軟件系統中,經常有這樣一些類,必須保證它們在系統中只存在一個類的實例,才能確保它們邏輯的正確性,以及良好的效率
如何繞過常規的構造器,提供一種機制來保證一個類只有一個實例。
這應該是類設計者的責任,不是類使用者的責任
意圖(Intent)
保證一個類僅有一個實例,并提供一個實例的全局訪問點。
通用實現:
1.靜態初始化
Codeusing?System;
namespace?SafeSingletonDemo
{
????public?sealed?class?StaticInitialization
????{
????????private?static?readonly?StaticInitialization?instance?=?new?StaticInitialization();
????????private?StaticInitialization()
????????{?
????????}
????????public?static?StaticInitialization?Instance
????????{
???????????get
???????????{
???????????????return?instance;
???????????}
????????}
????}
}
2.延遲初始化Singleton
Codeusing?System;
namespace?SafeSingletonDemo
{
????public?sealed?class?DelayInitialization
????{
????????DelayInitialization()
????????{
????????}
????????public?static?DelayInitialization?Instance
????????{
???????????get
???????????{
??????????????return?Nested.instance;
???????????}
????????}
????
????????class?Nested
????????{
????????????static?Nested()
????????????{
????????????}
????????????internal?static?readonly?DelayInitialization?instance?=?new?DelayInitialization();
????????}
????}
}
注意:
??? Singleton模式的實例構造器可以設置成protected允許子類派生
??? Singleton模式一般不要支持ICloneable接口
??? Singleton模式一般不要支持序列化,因為這樣可能產生多個實例
??? Singleton模式只考慮到對象創建的管理,沒有考慮對象銷毀的管理。就支持垃圾回收的平臺和對象的開銷來看,我們一般沒有必要對其銷毀進行特殊的處理。
轉載于:https://www.cnblogs.com/jewleo/archive/2009/04/30/1250_1.html
總結
以上是生活随笔為你收集整理的Singleton模式学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DOT NET 三个名词
- 下一篇: PHP调用Webservice实例