JavaRush /Blog Java /Random-ES /Patrón singleton en tus propias palabras
Roman_kh
Nivel 33
Харьков

Patrón singleton en tus propias palabras

Publicado en el grupo Random-ES

¡Hola a todos, javaRush!

Hoy les hablaré sobre el patrón de diseño Singleton(sencillo). Patrón singleton en tus propias palabras - 1Objetivo: crear una clase que tendrá solo UN objeto. Esto significa que no importa cuántas veces se acceda, se devolverá el mismo objeto que se creó la primera vez. Esto es algo conveniente y necesario en muchos lugares, no en vano se está implementando en marcos. Solicitud:
  • Por ejemplo, necesita conectar una base de datos a un proyecto y una clase que será responsable de conectarse a él. La conexión se crea una vez y no es necesario crearla una y otra vez.
  • Application settings— una clase responsable de la configuración de conexión necesaria para la aplicación: host y puerto de la base de datos, etc. Se crean una vez y se utilizan durante todo el funcionamiento de la aplicación.
  • Hay muchos más ejemplos que no he mencionado, ¡así que escribe tus opciones en los comentarios! =)
Después de esta introducción, según tengo entendido, puede mostrar un ejemplo de esta clase: (Aunque estoy seguro de que cada uno de nosotros puede idear una implementación de esto) Aquí está el ejemplo más simple, cuando hacemos que el constructor sea privado, es decir. No puede crear un objeto explícitamente. Y hay un método estático getInstance()que proporciona un objeto.
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Hay problemas con el subproceso múltiple y luego puedes poner un método getInstance()de marcador synchronized:
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static synchronized Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Al final, como siempre, quiero decir que si piensas diferente o encuentras algún error en mí, ¡escribe en los comentarios! Hablaremos de todo con mucho gusto :) Si te gustó el artículo escribe “+” y lo sabré. Esto es importante para mí :) PD: Estoy agregando más implementaciones: según Joshua Bloch , esta es la mejor manera de implementar la plantilla.Enum Singleton
public enum Singleton {
   INSTANCE;
}
Double Checked Locking & volatile
public class Singleton {
        private static volatile Singleton instance;

        public static Singleton getInstance() {
      Singleton localInstance = instance;
      if (localInstance == null) {
         synchronized (Singleton.class) {
            localInstance = instance;
            if (localInstance == null) {
               instance = localInstance = new Singleton();
            }
         }
      }
      return localInstance;
   }
}
Y además On Demand Holder idiom:
public class Singleton {

   public static class SingletonHolder {
      public static final Singleton HOLDER_INSTANCE = new Singleton();
   }

   public static Singleton getInstance() {
      return SingletonHolder.HOLDER_INSTANCE;
   }
}
+Inicialización diferida +Alto rendimiento -No se puede utilizar para campos de clase no estáticos. Cualquier pregunta/sugerencia: ¡escriba en los comentarios! Vea también mis otros artículos:
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION