天天看點

Singleton和靜态類的差別

參閱本帖:

<a href="http://topic.csdn.net/u/20110611/14/B02F8E18-3571-4644-8C57-EFF2106AED1C.html">http://topic.csdn.net/u/20110611/14/B02F8E18-3571-4644-8C57-EFF2106AED1C.html</a>

前些天在MS Press的一本名為C#程式設計導論中看到了一個概念:單體型。初讀其定義,感到甚為不解,定義為,一個類隻能執行個體化一次,并且提供一個全局通路點,它的典型實作手段是聲明private類型的構造函數和static類型的方法。 

        當時我就産生了兩個困惑:1、如果構造函數為private類型的話怎麼可能執行個體化呢?2、何為全局通路點。經過檢視資料和同僚溝通,我産生了我對單體型的了解:“我感覺單體型其實是不生成執行個體的,因為書上說實作單體型的一種典型的方法是使用private類型的構造函數和static類型的方法。這樣的話就不能夠對這個類進行執行個體化,而調用它的方法也隻能通過類名來調用(可能就是所謂的全局通路點吧)。” 

         我将我的了解發給了我的一個朋友(我稱之為“老大”的C# 牛人),結果他說我把靜态類和設計模式中的singleton模式弄混了。經過他的講解和我的重新認識,我發現盡管兩者有些地方很相似,但本質是不一樣的。 

         首先,designpattern中的singleton是一種設計模式(廢話,但我是初學者,還望了解,呵呵),它提供的是一種解決實際問題的設計方案。基本上我們可以通過如下兩種方式來實作singleton: 

1、 

public class Singleton 

     private static Singleton instance = new Singleton(); 

     private Singleton() {} 

     public static Singleton Instance() 

    { 

     return instance; 

     } 

}//通過第一次調類(調用類的靜态函數Instance()來擷取執行個體化後的對象)就執行個體化了此類的唯一一個對象,由于是靜态的也就保證了隻執行個體化一次。 

2、第二種方式是将new操作放在了Instance()方法中進行,實際上沒有什麼本質上的差別。 

      其次是靜态類的問題,靜态類與singleton最大的差別是靜态類根本就不執行個體化,就這一點上跟抽象類是一緻的。但也有所差別,抽象類是可以有執行個體成員的,而靜态類沒有;抽象類存在的唯一目的就是被繼承,而靜态類根本就不能被繼承(static sealed class MyClass)。

本文轉自cnn23711151CTO部落格,原文連結: http://blog.51cto.com/cnn237111/585875,如需轉載請自行聯系原作者

上一篇: 面試算法題6

繼續閱讀