Class 静态类相对于使用单例的优势 复制品

Class 静态类相对于使用单例的优势 复制品,class,static,singleton,Class,Static,Singleton,您可以找到在静态类上使用单例的许多原因。但在某些情况下,在使用单例之前最好先使用静态类。它们是什么?它始终是您实际上不需要在任何地方传递singleton实例的地方。 例如,如果singleton实现了某个接口,那么它将非常有用,而您不能使用静态类来实现它 记住,每个类实例都是由JVM管理的单例。 所以静态类是单例的。静态类更适合于不需要更改实现的情况。使用单例,您可以拥有一个具有各种实现的接口。静态类只能是实现。如果您的类不存储任何状态,请使用静态类 如果它存储状态,而您需要一个实例,那么(可






您可以找到在静态类上使用单例的许多原因。但在某些情况下,在使用单例之前最好先使用静态类。它们是什么?

它始终是您实际上不需要在任何地方传递singleton实例的地方。 例如,如果singleton实现了某个接口,那么它将非常有用,而您不能使用静态类来实现它

记住,每个类实例都是由JVM管理的单例。
所以静态类是单例的。

静态类更适合于不需要更改实现的情况。使用单例,您可以拥有一个具有各种实现的接口。静态类只能是实现。

如果您的类不存储任何状态,请使用静态类

如果它存储状态,而您需要一个实例,那么(可能)可以使用单实例


否则,请使用常规类。

多年来,我一直在与静态类消费者的可测试性作斗争,我可以诚实地说,它们是邪恶思想的产物。不过,说真的,我会在C#中使用静态类作为扩展方法,但在其他任何地方都不会使用。

您可以在以下情况下使用静态类:

1) 它的所有方法都是实用程序(很好的示例-类数学)

2) 您不想处理从垃圾收集器(在applet中)保存实例的问题,但我最好使用singleton

3) 您绝对确信它在将来不会变成有状态的,并且始终只需要该类的一个实例


如果您正在使用singleton,并且在一瞬间您意识到您需要多个实例,那么您的singleton可以很容易地转换为multitone,但是静态类会有问题。

singleton是一个只能实例化一个实例的类,而没有与静态方法关联的实例

如果你能用一个静态方法实现你想要的功能,那么这可能是你最好的方法,因为它更容易实现。考虑扩展方法——它们只是语法糖的静态方法。如果可以从逻辑上将静态方法视为现有类的助手,那么使用静态方法是有意义的

另一方面,如果您试图实现的功能中涉及某种状态,那么最好使用单例。Singleton对象可以包含/管理其状态并管理并发访问/线程,而使用静态类和静态方法会变得更加复杂。如果您在C#中使用单例,我强烈建议您阅读Jon Skeet关于正确单例实现的文章,该文章可从以下站点获得


与静态方法相比,单例方法更类似于静态类。在这种比较中,单例的一大优势是它们可以实现接口并从基类派生。这允许您将它们的实现与其接口分离。例如,如果我的核心程序集中有一个接口
IAccountService
,它是单例实现,在我的服务层有一个接口
SingletonAspNetAccountService
,那么我就可以用一个IoC容器将
IAccountService
注入我的UI层,而不需要依赖UI层中的我的服务层。另一方面,如果我有一个静态
Accounts
类,那么为了访问静态帐户功能,我必须为静态类的方法创建一个适配器,或者在UI中依赖服务层。

人们滥用/过度使用单例,这里是第三个选项。。。这两个都不要用。@Neil,在这个问题中,我看不到任何东西表明它与Java有关。好吧,它必须是有静态类的东西。在我看来,这实际上与前面的问题是等价的。如果您不这么认为,请回滚我的编辑。这似乎是关于静态类-一种特定的语言特性。有趣的一点。如果成本微不足道,是否有理由不具有修改的灵活性?