2009-08-10 106 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

相关问题