Skip to content

Instantly share code, notes, and snippets.

@AlbertoP18
Last active May 24, 2023 10:08
Show Gist options
  • Save AlbertoP18/95d21cdcd5da5326ccb5a3eeef14faff to your computer and use it in GitHub Desktop.
Save AlbertoP18/95d21cdcd5da5326ccb5a3eeef14faff to your computer and use it in GitHub Desktop.

¿Que es el patron de singleton?

Primero para hablar sobre el patrón de singleton tenemos que conocerlos conceptos que están antes.

¿ Qué es un patrón de diseño ?

Un patrón de diseño es una solución para resolver un problema que ocurre muchas veces cuando se está diseñando un programa.

Es como cuando se sigue una receta para hacer galletas, es mejor hacerlo con la receta que improvisar y hacerlas sin tener conocimiento.

Los patrones de diseño ayudan a los programadores a escribir programas de una forma mejor y más fácil de entender y de mantener. Es como tener una caja de herramientas con herramientas especialespara hacer un trabajo mejor.

Los patrones de diseño se dividen en tres tipos

  • Cracionales

  • Estructurales

  • Comportamiento

Hablemos del Patron Crecional

El patrón creacional se encarga de definir algunas estrategias quepueden ser usadas al requerir una instancia de alguna clase.

Estos patrones proporcionan una solución general para la creaciónde objetos, separando el proceso de creación y permitiendo unamayor flexibilidad en la creación de objetos.

Los patrones creacionales se utilizan para resolver problemas como la inicialización de objetos complejos, la creación de objetos en función de ciertas condiciones o la creación de objetos que dependen de otros objetos.

Existen varios tipos de patrones creacionales, como:

  • Patron de singleton

  • Patron de constructor

  • Patron de fabrica

  • Patron de Objeto Abstracto

Cada patrón tiene sus propias características y se utiliza para resolver problemas específicos en el diseño de software.

Ahora hablaremos sobre el patron de singleton

¿Que es el Patron Singleton?

Es un patrón de diseño creacional que se encarga de asegurarque solo exista una instancia de una clase en todo el programa. Esto significa que si creas una instancia de la clase en un lugar del programa, no podrás crear otra instancia en otro lugar.

¿ Cual es el proposito del patron singleton ?

Su propósito consiste en asegurar que una clase solo tenga una instancia y proporcionar un punto de acceso global a ella. No se encarga de la creación de objetos en sí, sino que se enfoca en la restricción en la creación de un objeto lo que reduce el consumo de recursos y mejora el rendimiento del programa.

¿En qué casos puedo usar el patrón de singleton?

  • Si se desea limitar el acceso a un recurso compartido, como por ejemplo una base de datos o un objeto de configuración, se puede utilizar el patrón Singleton para asegurarse de que solo se cree una única instancia de la clase que encapsula el recurso.

  • Si se desea que ciertos valores de configuración estén disponibles globalmente en todo el programa, se puede utilizar el patrón Singleton para crear una instancia que almacene estos valores y que pueda ser accedida desde cualquier parte del código.

  • En algunos casos, se puede utilizar el patrón Singleton para controlar el acceso concurrente a un recurso compartido. Al asegurarse de que solo se tiene una única instancia de la clase que maneja el recurso, se puede garantizar que el acceso a este se realice de manera controlada y segura.

¿ Como implemento el patron de singleton ?

public class Singleton {

private static Singleton instance;

Creamos la clase y adicionamos un atributo estático que en este caso se llama instance, este almacenará la única instancia que tiene clase.

// El Constructor es privado ñara evitar la creacion de instancias desde fuera

private Singleton(){}

El constructor es privado, esto para evitar que se puedan crear instancias fuera de la clase.

// El metodo estatico que deveuelve la unica instacia de la clase

public static  Singleton getInstance() {

if(instance == null){

instance = new Singleton();
}

return instance

}

Esta clase tiene un método estático llamado getInstance() ,lo que hace es que retorna la única instancia que existe de la clase.

primero verifica si el atributo instance ya guarda la instancia de la clase osea no es “null” si no lo es retorna el atributo instance.

si es “null” este le asigna la instancia y luego retorna el atributo.

Ventajas y Desventajas de Singleton

Ventajas:

  • Asegura que solo exista una instancia de la clase en todo el programa, lo que puede ser útil en situaciones donde se necesita un control estricto sobre el acceso a los recursos.

  • Proporciona un punto centralizado de acceso a la instancia de la clase, lo que puede facilitar la gestión de la misma y su uso en el programa.

  • Mejora el rendimiento del programa, ya que no es necesario crear múltiples instancias de una clase si solo se necesita una.

Desventajas:

  • El patrón Singleton puede hacer que el código sea más difícil de probar, ya que solo se puede instanciar una única vez la clase.

  • Si no se implementa correctamente, puede causar problemas de concurrencia y errores difíciles de detectar.

  • El uso excesivo del patrón Singleton puede hacer que el código sea menos modular y más difícil de mantener a largo plazo, puesto que todas las partes del programa que utilizan la instancia de la clase dependen de ella directamente.

  • La implementación del patrón Singleton puede ser más compleja que simplemente crear una instancia de la clase, lo que puede aumentar la complejidad del código.

En resumen, el patrón Singleton puede ser útil en algunas situaciones para controlar la creación de objetos y reducir el uso de recursos, pero también puede tener algunas desventajas. Debe ser utilizado con precaución y solo en situaciones donde es realmente necesario controlar estrictamente el acceso a los recursos.

Es importante utilizar el patrón Singleton de manera consciente y considerar las necesidades del programa antes de aplicarlo.

Articulo Elaborado Por:

Desarrollador de software en

Linkedin logo

en BlogIAS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment