2010-06-17 34 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