2010-06-17 38 views

回答

8

只有两个例子浮现在脑海:

参见:


更新:回答PeterMmm的(当前已删除?)评论(这问我是怎么知道的,这是一个单),检查Javadoc和源代码:

public class Runtime { 
    private static Runtime currentRuntime = new Runtime(); 

    /** 
    * Returns the runtime object associated with the current Java application. 
    * Most of the methods of class <code>Runtime</code> are instance 
    * methods and must be invoked with respect to the current runtime object. 
    * 
    * @return the <code>Runtime</code> object associated with the current 
    *   Java application. 
    */ 
    public static Runtime getRuntime() { 
     return currentRuntime; 
    } 

    /** Don't let anyone else instantiate this class */ 
    private Runtime() {} 

它返回每次都有相同的实例,并且它有一个private构造函数。

+1

Swing/AWT API也有一些。单身人士应小心使用。这就是为什么在整个Java API中没有那么多 – Hardcoded 2010-06-17 11:58:09

+1

您可以在同一个VM中拥有多个“桌面”对象。来自不同站点的Sun/Oracle JRE小程序将具有不同的“桌面”。 'Runtime'不带任何状态,所以最起码不是一个单身(并且你会注意到它的使用是毫无意义的冗长的)。 – 2010-06-17 17:07:40

+0

@Tom:“桌面”确实更多一些。关于'运行时',我想知道同样的东西......在JDK 1.0的黑暗时代,他们必须考虑*某些东西*。 – BalusC 2010-06-17 17:20:20

0

注意单身人士应小心使用和反思。在实施之前考虑反对单身人士和你的情况的论点。过度使用单身是一种反模式 - 与全局变量类似。

Singleton Wiki Article

Java Dev on Singletons

Why Singletons are Evil

我用他们过去,看到一些利益给他们。当我试图与他们一起进行测试驱动的开发时,我也非常恼火,因为这是他们邪恶的一个领域。从它们继承的结果会导致一些难以理解的行为 - 至少在Python中 - 我不确定在Java中。一般来说,你只是不要这样做。所以就像开始时看起来这是一个好主意,然后你陷入陷阱并意识到,或许这毕竟不是那么好。

0

这是用于Swing:SingleFrameApplication。检查出this presentation它奇妙地描述它是如何工作的。

+0

这不是一个单例,也不是标准Java API的一部分。 – BalusC 2010-06-17 12:18:40

+0

你为什么认为这不是一个单身人士? – Xorty 2010-06-17 12:34:40

+0

这是一个抽象类,没有'getInstance()'方法或返回* self *的类似方法。 javadoc也没有告诉任何关于它的词/暗示。整个班级更像一个静态的工厂,有一些额外的东西。 – BalusC 2010-06-17 13:18:02