让我们说我有一个简单的类名为WebsterDictionary有,可以采取一个字,并返回其定义的功能。也许有,可以采取一个定义并返回一个字的另一个功能。该课程由许多客户使用的所有的时间。

要便于查找,类包含一个成员变量是一个内存中字典存储了单词和它们的相关联的定义。假定词典的一旦被初始化无法改变 - 它是恒定的并且跨实例不会变化

这是一个很好的候选人静态类?我一直在读那静态类应该是无状态......但这类有国家(在内存中的字典)对不对?

编辑:同时,如果这确实成为一个静态类,我什么时候初始化字典因为将不再是一个构造?我该怎么检查,看看是否参考字典是空的每一个静态方法一次叫?

感谢。

有帮助吗?

解决方案

一个静态类时的功能性不需要是可替换的(例如,用于测试)是合适的。如果你可能想使用一个存根或嘲笑,你应该建立一个合适的接口,然后用单执行。

其他提示

要扩大在别人的答案,一个静态类或单身的的时候,你需要有一个类只有一个实例非常有用。这是很容易做到当数据是不可变的。因此,有可能是一个静态类是你想用这个东西。但是,这并不一定如此,它的自动你要使用的东西。

我的建议是要问自己一个问题:会来到这个世界轰然倒塌,如果我举例说明这些对象不止一个?如果是这样,使用单或静态类。否则,使用规则的类。

一个静态类可能是你想要的这里(见其他答案)。但是,不要让你的调用词典的错误“不可改变的”。

不可变并不意味着“永远不能在运行时改变”的在你使用的短语的意识,因为你的字典实际的的运行时的变化;你必须创建后,还必须添加的项目。即使在这一点上,你可以的打算的,它永远不会再发生变化,但它的可能的去改变它。你的意图是不是在任何地方执行。

一个真正的不可变对象的可以的创建后的变化,不管你多么尽量不要。取而代之的是,当你需要的对象的变化,你必须用所需的属性创建一个新的实例。

您可以考虑在一个意义上的静态类为具有正好一个实例。这可能不适合在那里你依赖于每个状态变化创建新实例的模式是最好的选择。

您既可以去单身或静态类。我可能会去一个单身,但我认为它主要是在这种特殊情况下的优先问题。

一个静态类是合适的,当只有一个“实例”应该永远存在,在这种情况下,单例模式可以是或不是更合适(取决于详情)。对于不可变对象,你需要的多个实例,当然是一个静态类是不适当的。

你所寻找的可能是单身?

这是没有必要的是静态类不必具有状态(其可具有静态成员作为其一部分,其可以是它的状态的一部分)。

至于你说的类是持有某种形式的全局状态的,即使它是只读的。去辛格尔顿方法使得它可以很清楚它是保存数据。

如果您使用依赖注入你可以把它注入,而不是把所有的课单的情况下,有一些代码,让你的实例。这意味着其他类将不依赖于单例的方法,并且如果可以进行测试时(结合的接口以使得能够与测试嘲笑替换)更容易地替换它。

scroll top