Java Singleton (con ejemplo)

En este tutorial, aprenderemos sobre el patrón de diseño singleton y cómo aplicarlo en Java con la ayuda de ejemplos.

Singleton es un patrón de diseño más que una característica específica de Java. Asegura que solo se cree una instancia de una clase.

Un patrón de diseño es como nuestra biblioteca de códigos que incluye varias técnicas de codificación compartidas por programadores de todo el mundo.

Singleton de Java

Así es como podemos usar singletons en Java.

  • crear un privateconstructor que restrinja la creación de un objeto fuera de la clase
  • crear un privateatributo que se refiera al objeto singleton.
  • crear un public staticmétodo que nos permita crear y acceder al objeto que creamos. Dentro del método, crearemos una condición que nos impedirá crear más de un objeto.

He aquí un ejemplo.

 class SingletonExample ( // private field that refers to the object private static SingletonExample singleObject; private SingletonExample() ( // constructor of the SingletonExample class ) public static SingletonExample getInstance() ( // write code that allows us to create only one object // access the object as per our need ) ) 

En el ejemplo anterior,

  • private static SingletonExample singleObject - una referencia al objeto de la clase.
  • private SingletonExample() - un constructor privado que restringe la creación de objetos fuera de la clase.
  • public static SingletonExample getInstance(): este método devuelve la referencia al único objeto de la clase. Dado que el método es estático, se puede acceder a él utilizando el nombre de la clase.

Uso de la clase Singleton

Los singleton se pueden utilizar mientras se trabaja con bases de datos. Se pueden usar para crear un grupo de conexiones para acceder a la base de datos mientras se reutiliza la misma conexión para todos los clientes. Por ejemplo,

 class Database ( private static Database dbObject; private Database() ( ) public static Database getInstance() ( // create object if it's not already created if(dbObject == null) ( dbObject = new Database(); ) // returns the singleton object return dbObject; ) public void getConnection() ( System.out.println("You are now connected to the database."); ) ) class Main ( public static void main(String() args) ( Database db1; // refers to the only object of Database db1= Database.getInstance(); db1.getConnection(); ) ) 

Cuando ejecutamos el programa, la salida será:

 Ahora está conectado a la base de datos. 

En nuestro ejemplo anterior,

  • Hemos creado una base de datos de clase singleton.
  • DbObject es un campo de tipo de clase. Esto hará referencia al objeto de la clase Base de datos.
  • El constructor privado Database()evita la creación de objetos fuera de la clase.
  • El método de tipo de clase estática getInstance()devuelve la instancia de la clase al mundo exterior.
  • En la clase Main, tenemos la variable de tipo de clase db1. Estamos llamando getInstance()usando db1 para obtener el único objeto de la base de datos.
  • getConnection()Solo se puede acceder al método utilizando el objeto de la Base de datos.
  • Dado que la base de datos solo puede tener un objeto, todos los clientes pueden acceder a la base de datos a través de una única conexión.

Es importante tener en cuenta que solo hay algunos escenarios (como el registro) donde los singleton tienen sentido. Incluso una conexión de base de datos no debería ser un singleton.

Le recomendamos que evite el uso de singleton por completo si no está seguro de si usarlo o no. Más información: ¿Qué tiene de malo Singleton?

Articulos interesantes...