Es un patrón que hace que una clase pueda ser instanciada una única vez. De este modo todos los servicios de la aplicación usan este objeto a través del mismo punto de acceso. Para evitar que se cree más de una instancia, se hace privado el constructor del objeto.
Utilidad
Muy útil a la hora de crear loggers: se crea el objeto una vez y se usa tantas veces como queramos.
Ejemplo
Creamos una clase MySingleton con un constructor privado y un método extra que devuelva una cadena (para poder usarlo después en la clase Main).
MySingleton.java
package com.luisgomezcaballero.singleton_demo; public class MySingleton { private static MySingleton myInstance = null; private MySingleton() { } public static MySingleton getMyInstance() { if (myInstance == null) { return new MySingleton(); } else { return myInstance; } } public String getString() { return "Hello World!"; } }
A continuación creamos una clase Main. Aquí tenemos que tener en cuenta que creamos nuestro objeto pero luego no hacemos new, sino que delegamos esta decisión en el método de la clase singleton, que decide si crearlo (en el caso de que no exista) o reutilizar el que existe.
Main.java
package com.luisgomezcaballero.singleton_demo; public class Main { public static void main(String[] args) { MySingleton mySingleton = MySingleton.getMyInstance(); System.out.println(mySingleton.getString()); } }
Repositorio
El código de este proyecto puede encontrarse en https://github.com/luisgomezcaballero/singleton-demo.
So, what do you think ?