2009-08-10 145 views
1

我知道一個只包含公共靜態成員函數的類被稱爲Monotype。而某些類,例如Java/C#中的Integer類,實現了各種靜態功能。我也是編寫廚房水槽實用程序類的指南,如InputCleaner.StripHTMLTags()等。只有公共靜態方法與實例化類的類

是否存在Monotypes和公共靜態函數的指導原則?

例如,讓說我有一個骰子類

class Dice 
{ 

    public static function RollD100() 
    { 
     .... 
    } 
} 

應該是蒙納,或具有被實例化一個類?

我確實覺得對於必須被實例化類的幾個優點:

  1. 你需要一個對象,如果你有類中的狀態或數據保持的
  2. 軌道您可以使用多態,如那裏似乎沒有靜態成員函數多態性(至少在C++中,如果我沒有記錯,想想PHP 5.3可能有)

而對於單一型,你會得到

  1. 它的功能就像一個全局函數
  2. 沒有初始化

除了這些必要的步驟,還有什麼其他準則有哪些?

+0

只是澄清一點,這不僅僅是關於擴展方法,而更多的是「什麼時候使用公共靜態方法/成員函數?」 – Extrakun 2009-08-11 06:46:37

回答

1

我使用這些的唯一目的是在單個模塊中收集相關但無狀態的功能。只要你添加狀態(成員變量),你有一個單身人士。

0

Monotypes,singletons和static類對於某些場景是完全有效的。但他們冒着設置OO之前的思維方式的風險,從而使您獲得更好的代碼清晰度,可發現性和重用性。例如,像StripHTMLTags()這樣的東西對String類的擴展更有意義嗎? (或者也許是輸入控件類)?

+0

個人而言,我反對使用擴展方法,除了最基本的字符串操作之外。在那裏放置很多可能不適合某些字符串的方法似乎不太合適。此外,該方法可能實施的地方也不那麼明顯。 – Thorarin 2009-08-10 21:53:57

相關問題