2010-06-17 17 views

Respuesta

8

Sólo dos ejemplos viene a la mente:

Ver también:


actualización: para responder (actualmente eliminada?) El comentario de PeterMmm (que pregunté cómo sabía que era un producto único), comprobar el javadoc y el código fuente:

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() {} 

Devuelve la misma instancia cada vez y tiene un constructor private.

+1

También hay algunos en la API Swing/AWT. Singletons debe usarse con cuidado. Es por eso que no hay tantos en toda la API de Java – Hardcoded

+1

Puede tener múltiples objetos 'Desktop' dentro de la misma máquina virtual. En el Sun/Oracle JRE, los applets de diferentes sitios tendrán diferentes 'Desktop's. 'Runtime' no tiene ningún estado, por lo que al menos no es útil como singleton (y notará que su uso es inútilmente detallado). –

+0

@Tom: el 'Escritorio' es, de hecho, más una multitón. Sobre el 'Runtime', me preguntaba lo mismo ... Deben tener * algo * en mente cuando lo diseñen durante las oscuras edades de JDK 1.0. – BalusC

0

Nota Los singletons se deben usar con cuidado y reflexión. Considere los argumentos en contra de los singleton y su situación antes de implementar uno. El uso excesivo de singletons es un antipatrón, similar a las variables globales.

Singleton Wiki Article

Java Dev on Singletons

Why Singletons are Evil

Los he usado en el pasado y ver algún beneficio para ellos. También he estado muy molesto al tratar de hacer un desarrollo impulsado por pruebas con ellos, que es un área donde son malvados. También heredar de ellos resulta en un comportamiento difícil de entender, al menos en Python, no estoy seguro en Java. En general, simplemente no lo haces por eso. Así que al igual que enhebrar estos parece una gran idea al principio y luego te encuentras con las trampas y te das cuenta bien de que tal vez esto no sea tan bueno después de todo.

0

Esto es para Swing: SingleFrameApplication. Consulte this presentation que describe maravillosamente cómo funciona.

+0

Este no es un singleton y tampoco es parte de la API Java estándar. – BalusC

+0

¿Por qué crees que no es un singleton? – Xorty

+0

Es una clase abstracta y no hay ningún método 'getInstance()' o similar que devuelva * self *. El javadoc tampoco dice ninguna palabra/sugerencia al respecto.Toda esa clase parece más una fábrica estática con algunos extra. – BalusC