何时使用java单例

时间:2013-07-05 17:43:30

标签: java design-patterns singleton

据我所知,单例类每个jvm只有一个实例。

但是从设计的角度来看,如何知道什么时候让班级成为单身人士呢?我知道实用工具类可能是单例的一个很好的例子,但还有什么呢?

4 个答案:

答案 0 :(得分:1)

你永远不应该使用单身模式。它使您的代码更难以测试,并且基本上是一个奇特的全局变量。如果你想每个jvm有一个类的一个实例,设计你的代码,这样它每个jvm只创建一个类的一个实例。没有必要为此引入单例模式。有关这方面的一些示例,请查看Spring以及它如何使用“singleton”。这是一个很好的方法。

答案 1 :(得分:0)

只有当您知道每个对象最多只需要一个实例时,才应使用单例。

例如,

  

记录器:你不太可能需要两个记录器。

     

访问特定类型资源的类。

     

某些类型的工厂(详细了解工厂模式)

请注意,上面的示例是一般指南,并且肯定例外。

这是了解更多单身人士的好地方:http://www.oodesign.com/singleton-pattern.html

我对新程序员的建议是非常非常少地使用单例模式。我从未见过有人使用过单身模式,但我看到有人一直滥用它。

答案 2 :(得分:0)

您需要对在您的应用程序中拥有多个实例没有意义的对象强制执行单例行为。例如,任何具有两个 SecurityManager 的应用程序都没有多大意义。

有时有两个或更多实例可能会破坏应用程序专门 system 软件。一个很好的例子是反病毒应用程序。想象一下,有两个实时监控组件实例,每个组件都互相标记为流氓进程。

企业服务总线(ESB)怎么样?如果每个模块都收到 Bus 的新实例,则不会连接任何内容。如何拥有多个应用程序缓存实例?您可能会通过获取某些其他缓存实例中已有的内容来浪费资源,从而导致性能下降。

所以,我希望你明白这个主意。在拥有两个或更多实例时,任何可能导致不良应用程序行为的事物都是成为 Singleton 的候选者。

答案 3 :(得分:-1)

这可能会有所帮助。

如何以及何时使用Singleton类

http://codeofdoom.com/wordpress/2008/04/20/how-and-when-to-use-singleton-classes/

以上链接中的示例

Singleton的用途是什么?。

Singleton类通常用于诸如Factory类,Builder类和类似的东西。一些现实世界的例子包括Hibernate中的SessionFactory类 - 它实际上是一个单例。或者使用log4j,当您调用其记录器时,它使用单例类来返回它。如果有人在Flex / Actionscript 3中使用过Cairngorm,那么它的模型定位器就是一个Singleton。