in

Clase Singleton en Java – GeeksforGeeks

gfg 200x200 min

En la programación orientada a objetos, una clase singleton es una clase que solo puede tener un objeto (una instancia de la clase) a la vez.
Después de la primera vez, si intentamos crear una instancia de la clase Singleton, la nueva variable también apunta a la primera instancia creada. Entonces, cualquier modificación que hagamos a cualquier variable dentro de la clase a través de cualquier instancia, afecta la variable de la instancia única creada y es visible si accedemos a esa variable a través de cualquier variable de ese tipo de clase definido.

Recuerde los puntos clave al definir la clase como clase singleton, es decir, al diseñar una clase singleton:

  1. Hacer que el constructor sea privado.
  2. Escriba un método estático que tenga un objeto de tipo de retorno de esta clase singleton. Aquí, el concepto de Inicialización perezosa se utiliza para escribir este método estático.

Brevemos cómo la clase singleton varía de la clase normal en Java. Aquí la diferencia está en términos de instanciación, ya que para la clase normal usamos constructor, mientras que para la clase singleton usamos método getInstance () que veremos en el ejemplo 1 como se muestra a continuación. En general, para evitar confusiones, también podemos usar el nombre de la clase como nombre del método al definir este método, que será como se muestra en el ejemplo 2 a continuación.

Implementación:

Ejemplo 1

JAVA

class Singleton {

    

    

    private static Singleton single_instance = null;

    

    public String s;

    

    

    

    private Singleton()

    {

        s = "Hello I am a string part of Singleton class";

    }

    

    

    public static Singleton getInstance()

    {

        if (single_instance == null)

            single_instance = new Singleton();

        return single_instance;

    }

}

class GFG {

    

    public static void main(String args[])

    {

        

        Singleton x = Singleton.getInstance();

        

        Singleton y = Singleton.getInstance();

        

        Singleton z = Singleton.getInstance();

        

        

        System.out.println("Hashcode of x is "

                           + x.hashCode());

        System.out.println("Hashcode of y is "

                           + y.hashCode());

        System.out.println("Hashcode of z is "

                           + z.hashCode());

        

        if (x == y && y == z) {

            

            System.out.println(

                "Three objects point to the same memory location on the heap i.e, to the same object");

        }

        else {

            

            System.out.println(

                "Three objects DO NOT point to the same memory location on the heap");

        }

    }

}

Producción
Hashcode of x is 558638686
Hashcode of y is 558638686
Hashcode of z is 558638686
Three objects point to the same memory location on the heap i.e, to the same object

Explicación de salida:

Clase singleton

En una clase singleton, cuando llamamos por primera vez al método getInstance (), crea un objeto de la clase con el nombre single_instance y lo devuelve a la variable. Dado que single_instance es estático, se cambia de nulo a algún objeto. La próxima vez, si intentamos llamar al método getInstance (), dado que single_instance no es nulo, se devuelve a la variable, en lugar de volver a crear una instancia de la clase Singleton. Esta parte se realiza mediante la condición if.
En la clase principal, instanciamos la clase singleton con 3 objetos x, y, z llamando al método estático getInstance (). Pero en realidad después de la creación del objeto x, las variables y y z apuntan al objeto x como se muestra en el diagrama. Por lo tanto, si cambiamos las variables del objeto x, eso se refleja cuando accedemos a las variables de los objetos y y z. Además, si cambiamos las variables del objeto z, eso se refleja cuando accedemos a las variables de los objetos x e y.
Ahora hemos terminado de cubrir todos los aspectos del ejemplo 1 y hemos implementado lo mismo, ahora implementaremos la clase Singleton con el nombre del método como el nombre de la clase.

Ejemplo 2

JAVA

class Singleton {

    

    private static Singleton single_instance = null;

    

    public String s;

    

    

    

    private Singleton()

    {

        s = "Hello I am a string part of Singleton class";

    }

    

    

    public static Singleton Singleton()

    {

        

        if (single_instance == null) {

            single_instance = new Singleton();

        }

        return single_instance;

    }

}

class GFG {

    

    public static void main(String args[])

    {

        

        Singleton x = Singleton.Singleton();

        

        Singleton y = Singleton.Singleton();

        

        Singleton z = Singleton.Singleton();

        

        

        x.s = (x.s).toUpperCase();

        

        System.out.println("String from x is " + x.s);

        System.out.println("String from y is " + y.s);

        System.out.println("String from z is " + z.s);

        System.out.println("n");

        

        z.s = (z.s).toLowerCase();

        System.out.println("String from x is " + x.s);

        System.out.println("String from y is " + y.s);

        System.out.println("String from z is " + z.s);

    }

}

Producción
String from x is HELLO I AM A STRING PART OF SINGLETON CLASS
String from y is HELLO I AM A STRING PART OF SINGLETON CLASS
String from z is HELLO I AM A STRING PART OF SINGLETON CLASS


String from x is hello i am a string part of singleton class
String from y is hello i am a string part of singleton class
String from z is hello i am a string part of singleton class

Explicación de salida:

En la clase singleton, cuando llamamos por primera vez al método Singleton (), crea un objeto de la clase Singleton con el nombre single_instance y lo devuelve a la variable. Dado que single_instance es estático, se cambia de nulo a algún objeto. La próxima vez, si intentamos llamar al método Singleton (), dado que single_instance no es nulo, se devuelve a la variable, en lugar de volver a crear una instancia de la clase Singleton.
Este artículo es una contribución de Pavan Gopal Rayapati. Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o envíe su artículo por correo electrónico a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.

¡Atención lector! No dejes de aprender ahora. Hazte con todo lo importante Fundación Java y conceptos de colecciones con el Curso de Fundamentos de Java y Colecciones de Java a un precio asequible para los estudiantes y prepárese para la industria. Para completar su preparación desde el aprendizaje de un idioma hasta DS Algo y muchos más, consulte Curso completo de preparación para entrevistas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

apple touch icon@2

java: ¿Cuáles son los parámetros -Xms y -Xmx al iniciar JVM?

150px MMC Card

MMC vs tarjeta SD: diferencia y comparación