Singleton Propósito Singleton es un patrón de diseño creacional que nos permite asegurarnos de que una clase tenga una única instancia, a la vez que proporciona un punto de acceso global a dicha instancia.
Analogía en el mundo real El gobierno es un ejemplo excelente del patrón Singleton. Un país sólo puede tener un gobierno oficial. Independientemente de las identidades personales de los individuos que forman el gobierno, el título “Gobierno de X” es un punto de acceso global que identifica al grupo de personas a cargo.
Pseudocodigo
En este ejemplo, la clase de conexión de la base de datos actúa como Singleton . Esta clase no tiene un constructor público, por lo que la única manera de obtener su objeto es invocando el método obtenerInstancia
. Este método almacena en caché el primer objeto creado y lo devuelve en todas las llamadas siguientes.
// La clase Base de datos define el método `obtenerInstancia`
// que permite a los clientes acceder a la misma instancia de
// una conexión de la base de datos a través del programa.
class Database is
// El campo para almacenar la instancia singleton debe
// declararse estático.
private static field instance : Database
// El constructor del singleton siempre debe ser privado
// para evitar llamadas de construcción directas con el
// operador `new`.
private constructor Database ( ) is
// Algún código de inicialización, como la propia
// conexión al servidor de una base de datos.
// El método estático que controla el acceso a la instancia
// singleton.
public static method getInstance ( ) is
if ( Database .instance = = null ) then
acquireThreadLock ( ) and then
// Garantiza que la instancia aún no se ha
// inicializado por otro hilo mientras ésta ha
// estado esperando el desbloqueo.
if ( Database .instance = = null ) then
Database .instance = new Database ( )
return Database .instance
// Por último, cualquier singleton debe definir cierta
// lógica de negocio que pueda ejecutarse en su instancia.
public method query ( sql ) is
// Por ejemplo, todas las consultas a la base de datos
// de una aplicación pasan por este método. Por lo
// tanto, aquí puedes colocar lógica de regularización
// (throttling) o de envío a la memoria caché.
class Application is
method main ( ) is
Database foo = Database .getInstance ( )
foo .query ( " S E L E C T . . . " )
Database bar = Database .getInstance ( )
bar .query ( " S E L E C T . . . " )
// La variable `bar` contendrá el mismo objeto que la
// variable `foo`. Pros y contras Puedes tener la certeza de que una clase tiene una única instancia. Obtienes un punto de acceso global a dicha instancia. El objeto Singleton solo se inicializa cuando se requiere por primera vez. Vulnera el Principio de responsabilidad única . El patrón resuelve dos problemas al mismo tiempo. El patrón Singleton puede enmascarar un mal diseño, por ejemplo, cuando los componentes del programa saben demasiado los unos sobre los otros. El patrón requiere de un tratamiento especial en un entorno con múltiples hilos de ejecución, para que varios hilos no creen un objeto Singleton varias veces. Puede resultar complicado realizar la prueba unitaria del código cliente del Singleton porque muchos frameworks de prueba dependen de la herencia a la hora de crear objetos simulados (mock objects). Debido a que la clase Singleton es privada y en la mayoría de los lenguajes resulta imposible sobrescribir métodos estáticos, tendrás que pensar en una manera original de simular el Singleton. O, simplemente, no escribas las pruebas. O no utilices el patrón Singleton.
me parece muy correcta la información, sigan así
ResponderBorrar