静态类优于使用Singleton的优点

时间:2009-05-08 11:19:45

标签: class static singleton

复制

  

What’s wrong with singleton?
  Singletons: good design or a crutch?
  Singleton: How should it be used
  What is so bad about Singletons


您可以找到在静态类上使用Singleton的众多原因。但肯定会有一些情况,在Singleton之前使用静态类会更好。它们是什么?

6 个答案:

答案 0 :(得分:9)

您可以在以下时间使用静态类:

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

2)你不想处理从垃圾收集器(在applet中)保存你的实例,但我最好在那里使用单例

3)你绝对相信它将来不会成为有状态,你确信你总是只需要该类的一个实例

如果您正在使用单身,并且在一瞬间您意识到您需要多个实例,那么您的单身人士可以轻松转换为多音,但您将遇到静态类的问题

答案 1 :(得分:5)

多年来,在与静态班级消费者的可测试性斗争之后,我可以诚实地说他们是邪恶思想的作品。但是说真的,我在C#中使用静态类作为扩展方法,但实际上并没有在其他地方使用。

答案 2 :(得分:3)

如果你的类没有存储任何状态,那么使用Static类。

如果它存储状态并且您需要单个实例,那么(可能)使用Singleton。

否则使用常规课程。

答案 3 :(得分:2)

当您不需要更改实现时,静态类更好。使用Singleton,您可以拥有各种实现的接口。一个静态类,只能是一个实现。

答案 4 :(得分:0)

单例是一个类,其中只能实例化一个实例,而没有与静态方法相关联的实例。

如果您可以使用单个静态方法实现所需的功能,那么这可能是您最好的方法,因为它更容易实现。考虑扩展方法 - 它们只是具有语法糖的静态方法。如果您可以逻辑地将静态方法视为现有类的帮助程序,那么使用静态方法是有意义的。

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

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

答案 5 :(得分:-2)

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

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