從C#的Singleton設計模式實現看.NET Framework特性對開發者的重要性 (轉)
從的Singleton設計實現看 特性對開發者的重要性:namespace prefix = o ns = "urn:schemas--com::office" />
近來,我在學習如何在C#語言中使用設計模式中讀到一些資料,其中有關Singleton設計模式引起了我的注意。
學過設計模式的開發者都知道Singleton模式。我想簡要地解釋一下這個設計模式是為那些尚未學習過設計模式的朋友。Singleton設計模式是告訴您如何在你的應用建立一個唯一類示例的全域性,也就是說,這個物件只能被例項化一次,這個物件同時提供一個訪問它的一個全域性的訪問點。這種物件如應用程式中的視窗管理器或者是列印假離線、連線池等。
現在讓我們先看一下設計模式一書中對Singleton模式的C++實現(為了方便比較,我把實現的程式碼寫成內聯的方式):
class Singleton
{
public:
static Singleton* Instance()
{
if(_instance==0)
{
_instance=new Singleton;
}
return _instance;
}
protected:
Singleton();
Private:
Static Singleton* _instance;
};
Stington* Singleton::_instance=0;
這裡我不想對上述的程式碼作解釋,大家可以參閱本文後面提供的參考文獻。
為了更好的理解C#,我這裡也出示一下中的Singleton模式實現程式碼(不是有人認為C#是對Java的剽竊嗎J):
class Singleton
{
public Singleton Instance()
{
if(_instace==null)
{
synchronized (Class.forName("Singleton"))
{
if (_instance == null)
{
_instance = new Singleton();
}
}
}
return _instance;
}
protected Singleton() {}
private static Singleton _instance = null;
}
在上述的Java程式碼中使用了雙重檢測機制,來避免多個執行緒的Singleton例項化問題。同樣,我也不想對上述的程式碼做任何解釋。
首先,讓我們看一下C#中類似Java的實現:
class Singleton
{
public static Singleton Instance()
{
if(_instance==null)
{
lock (typeof(Singleton))
{
if(_instace==null)
{
_instance=new Singleton();
}
}
}
return _instance;
}
protected Singleton(){}
private static volatile Singleton _instance=null;
}
現在,是我們睜大眼睛的時候了,下面是利用.NET Framework平臺優勢實現Singleton模式的程式碼:
sealed class Singleton
{
private Singleton();
public static readonly Singleton Instance=new Singleton();
}
非常吃驚是不是,不僅程式碼減少了許多,同時也解決了執行緒問題帶來的上損失。有避免了的問題。上述的程式碼真的能正常工作嗎?如果能,那麼它又是怎樣工作的呢?
注意到,Singleton類被宣告為sealed,以此保證它自己不會被繼承,其次沒有了Instance的方法,將原來_instance成員變數變成public readonly,並在宣告時被初始化。透過這些改變,我們確實得到了Singleton的模式,原因是在JIT的處理過程中,如果類中的static屬性被任何方法使用時,.NET Framework將對這個屬性進行初始化,於是在初始化Instance屬性的同時Singleton類例項得以建立和裝載。而私有的構造和readonly(只讀)保證了Singleton不會被再次例項化,這正是Singleton設計模式的意圖。
本文不是要討論設計模式,而只是想透過這個例子來說明一件事,那就是精通.NET Framework並將它靈活運用對實際應用開發的重要性。
參考文獻:
——設計模式:可複用物件導向的基礎 [GOF]
——Design Pattern in C# [Jame W Cer]
——?url=/library/en-us/dnbda/html/singletondespatt.asp">Exploring the Singleton Design Pattern
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992816/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用C# (.NET Core) 實現單體設計模式 (Singleton Pattern)C#設計模式
- 設計模式、用Delphi實現---->Singleton 模式 (轉)設計模式
- C++設計模式:Singleton的模板實現之一 (轉)C++設計模式
- 大話西遊之設計模式_從猴王出世看singleton設計模式
- JScript下Singleton模式的實現。 (轉)JS模式
- Singleton模式之Delphi實現 (轉)模式
- 我所理解的設計模式(C++實現)——單例模式(Singleton Pattern)設計模式C++單例
- [用設計模式鍛鍊C#系列]之Singleton、Bridge (轉)設計模式C#
- C++完美實現Singleton模式[轉]C++模式
- 設計模式(四)Singleton設計模式設計模式
- Singleton設計模式設計模式
- 設計模式之C#實現(一)--AbstractFactory(補) (轉)設計模式C#
- 關於多型實現Singleton模式的探討 (轉)多型模式
- 兩種Delphi實現Singleton模式方法 (轉)模式
- 使用C# (.NET Core) 實現命令設計模式 (Command Pattern)C#設計模式
- 使用C# (.NET Core) 實現狀態設計模式 (State Pattern)C#設計模式
- 使用C# (.NET Core) 實現迭代器設計模式 (Iterator Pattern)C#設計模式
- 設計模式 - Singleton in Java設計模式Java
- 設計模式—singleton(單例模式)設計模式單例
- 設計模式 - 單例模式(Singleton)設計模式單例
- C# 網路程式設計:.NET 開發者的核心技能C#程式設計
- 使用C# (.NET Core) 實現抽象工廠設計模式 (Abstract Pattern)C#抽象設計模式
- 使用C# (.NET Core) 實現組合設計模式 (Composite Pattern)C#設計模式
- 設計模式的征途—1.單例(Singleton)模式設計模式單例
- 設計模式入門(1)------單件(Singleton) (轉)設計模式
- 設計模式的征途(C#實現)—文章目錄索引設計模式C#索引
- 設計模式-C#實現簡單工廠模式設計模式C#
- Singleton 單例設計模式單例設計模式
- 設計模式之——Singleton pattern設計模式
- java設計模式-單例模式SingletonJava設計模式單例
- 設計模式之單例模式 - Singleton設計模式單例
- 設計模式——3單例模式(Singleton)設計模式單例
- 設計模式之Singleton - 單態模式設計模式
- 設計模式 - 單例模式Singleton的8種寫法設計模式單例
- singleton模式的實現方法有很多種麼?模式
- 設計模式、用Delphi實現---->Builder模式 (轉)設計模式UI
- PHP設計模式(四)單例模式(Singleton)PHP設計模式單例
- 設計模式之單例模式(Singleton Pattern)設計模式單例