No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Patr贸n Singleton y Casos de Uso

32/42
Recursos

Es un patr贸n que te asegura que una clase solo tiene una instancia. Esta 煤nica instancia puede ser consumida por cualquier otro objeto.

Aportes 40

Preguntas 3

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

鈥淪ingle鈥 en ingl茅s es 鈥渟encillo鈥 (o soltero 卢w卢) as铆 que se puede recordar si se asocia con su significado 鈥淪ingleton鈥 vendr铆a a ser un objeto o instancia 鈥渟olterona鈥.

Singleton

Diagrama UML de una clase que implementa el patr贸n singleton.

En ingenier铆a de software, singleton o instancia 煤nica es un patr贸n de dise帽o que permite restringir la creaci贸n de objetos pertenecientes a una clase o el valor de un tipo a un 煤nico objeto.

Su intenci贸n consiste en garantizar que una clase solo tenga una instancia y proporcionar un punto de acceso global a ella.

El patr贸n singleton se implementa creando en nuestra clase un m茅todo que crea una instancia del objeto solo si todav铆a no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor (con modificadores de acceso como protegido o privado).

El patr贸n singleton se implementa creando en nuestra clase un m茅todo que crea una instancia del objeto solo si todav铆a no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor (con modificadores de acceso como protegido o privado).

La instrumentaci贸n del patr贸n puede ser delicada en programas con m煤ltiples hilos de ejecuci贸n. Si dos hilos de ejecuci贸n intentan crear la instancia al mismo tiempo y esta no existe todav铆a, solo uno de ellos debe lograr crear el objeto. La soluci贸n cl谩sica para este problema es utilizar exclusi贸n mutua en el m茅todo de creaci贸n de la clase que implementa el patr贸n.

Las situaciones m谩s habituales de aplicaci贸n de este patr贸n son aquellas en las que dicha clase controla el acceso a un recurso f铆sico 煤nico (como puede ser el rat贸n o un archivo abierto en modo exclusivo) o cuando cierto tipo de datos debe estar disponible para todos los dem谩s objetos de la aplicaci贸n.

El patr贸n singleton provee una 煤nica instancia global gracias a que:

  • La propia clase es responsable de crear la 煤nica instancia.
  • Permite el acceso global a dicha instancia mediante un m茅todo de clase.
  • Declara el constructor de clase como privado para que no sea instanciable directamente.
  • Al estar internamente autoreferenciada, en lenguajes como Java, el recolector de basura no act煤a.

Javascript

Una implementaci贸n del patr贸n singleton en Javascript es la siguiente:

Singleton = function Singleton$constructor() {
    return { 
        getInstance : function Singleton$getInstance() {
            return this;
        }
    };
}();

隆Qu茅 buena explicaci贸n del Patr贸n Singleton! En lo personal ya lo conoc铆a, pero me encant贸.

La 煤nica cr铆tica que marco es que tal vez a las/os que no esten acostumbradas/os a la Programaci贸n Orientada a Objetos (POO) les cueste un poco entender algunas cosas como:
-UML (forma gr谩fica de representaci贸n de un sistema basado en Clases).
-Que 鈥渕茅todo鈥 es como se denomina a una funci贸n definida dentro de una clase.
-El t茅rmino est谩tico (que significa que la propiedad o el m茅todo no pertenece a las instancias, si no a la clase y es 煤nico).
-Qu茅 implica la visibilidad (p煤blicos o privados) de los elementos. Cuando algo es p煤blico puede ser accedido desde cualquier parte del programa, si es privado s贸lo la propia clase puede accederlo o usarlo.

PRO TIP: Cuando hacemos un export, el mismo se cachea, por lo que cuando lo importamos en otros archivos, siempre devuelve lo mismo.

Mongoose hace uso de esto como alternativa del Patr贸n de Dise帽o Singleton.

Se me hizo f谩cil entender este patr贸n en videojuegos, ya que se utiliza frecuentemente en clases que almacenan informaci贸n o funciones globales. Por ejemplo, una clase LevelManager que podamos llamar cada vez que queremos subir de nivel o saber en qu茅 nivel estamos.
Al ser un singleton aseguramos que otras clases y objetos tengan acceso a la misma informaci贸n en todo momento, pues no es posible que haya m谩s de un LevelManager por ah铆 馃槂

Que tal compa帽eros, por ah铆 vi que compartieron este link y es muuuuy bueno, explican muy bien todos los patrones de dise帽o de manera muy gr谩fica 馃槂

Que Quiere decir con se 鈥淐achea鈥 ? cuando importamos la instancia de de new Mongoose*()

En primer semestre de ingenier铆a de sistemas me ense帽aron como crear las clases a mano como el ejemplo que da 茅l, se realiza para el lenguaje de java. es muy parecida.

  • Singleton --> Ayuda a que una clase solo pueda crear una instancia de si misma.

Un caso de uso:
Justamente estaba haciendo un ejercicio con clases y me daba una instancia diferente por cada objeto que generaba, creo que entonces este patr贸n me ayudar铆a a que por cada objeto la instancia generada fuera siempre la misma.

Ejemplo, tengo dos clases una de Users, y otra de RoomChat.
Necesito que cada User maneje la misma instancia de la RoomChat, ah铆 es donde veo que puede ser util el patron Singleton.

Espero no equivocarme y que sea de utilidad.

En Venezuela tenemos 2 gobiernos , uno legitimo y otro usurpando funciones. esta analogia ya no aplica para nosotros. haha. hay q re铆r para no llorar

no entendi un cara***

Singleton聽(Instancia 煤nica): Nos garantiza la existencia de una 煤nica instancia para una clase.

repasando el curso 馃槃

Singleton Ayuda a que una clase solo pueda crear una instancia de si misma.

Genial! Otro ejemplo de un patr贸n Singleton podr铆a ser un logger del lado del servidor, el cual puedes usar para imprimir logs a manera de archivos, yan que realmente solo necesitas una instancia

A mi al d铆a de hoy a煤n me confunde javascript con sus imports/export, porque, por ejemplo, con el express router, puedo crear rutas en un archivo, pero debo importar al router, y si quiero crear mas rutas en un archivo diferente (tambi茅n tengo que importar el Router ah铆) por alguna extra帽a raz贸n, las rutas del primer archivo no existen鈥

Vue.js podr铆a definirse como un framework que usa Singleton? Ya que aunque puedas utilizar varias instancias es mas que recomendable utilizar solo una.

Muchas veces he le铆do que el patr贸n de singleton, se considera un anti-patr贸n.

Les recomiendo pasarse por esta pagina https://refactoring.guru/es/ para profundizar el aprendizaje de los patrones de dise帽o

Apuntes de la clase



Saber sobre patrones de dise帽o te ayuda a tener c贸digo m谩s escalable, elegante y 贸ptimo, y sobre todo evita que re inventes la rueda a problemas bastante com煤nes en el desarrollo

el famoso singleton, hay que saberlo usar para no hacer cualquier cosa.

para profundizar, este es un link de un libro publicado gratuito que habla de los patrones de dise帽o. (it is written in english)
learning Javascript Design Patterns

Ejemplo usando TypeScript:

/*
* La clase Singleton define el m茅todo getInstance() que permite
* a los clientes acceder a la unica instancia singleton.
*
*/
class Singleton {
    private static instance: Singleton;

    /*
    * El constructor de Singleton siempre debe ser private para evitar
    * llamadas directas de construcci贸n con el operador "new"
    */
	   private constructor () {}

   /*
   * El siguiente es el m茅todo que controla el acceso a la instanciaci贸n 
   * 
   * Esta implementaci贸n te permite subclasear a la clase Singleton mientras
   * mantienes una misma instancia.
   */
	  public static getInstance (): Singleton {
	      if (!Singleton.instance) {
	          Singleton.instance = new Singleton();
	      }
      /* Finalmente, singleton debe definir con cierta l贸gica que ejecute la instancia.
      */
    return logicaDeInstancia();
  }
}

// C贸digo del Cliente:
function clientCode () {
    const s1 = Singleton.getInstance();
    const s2 = Singleton.getInstance();

    if (s1 === s2) {
        console.log('Singleton est谩 funcionando. Ambos tienen la misma variable.');
    } else {
        console.log(' Singleton no est谩 funcionando.');
        
    }
}

clientCode();

馃挕En resumen馃挕
Utiliza el patr贸n Singleton cuando una clase en tu aplicaci贸n deba tener una sola instancia disponible para todos los usuarios; por ejemplo, un 煤nico objeto de base de datos compartido por diferentes partes de la app.

El patr贸n Singleton deshabilita todos los dem谩s medios para crear objetos de una clase, excepto el m茅todo de creaci贸n especial. Este m茅todo crea un nuevo objeto o devuelve uno existente si ya se ha creado.

Otro punto, es que puedes utilizar el patr贸n Singleton cuando necesites un control m谩s estricto sobre las variables globales.

A diferencia de las variables globales, el patr贸n Singleton garantiza que solo haya una instancia de una clase. Nada, excepto la propia clase Singleton, puede reemplazar la instancia almacenada en cach茅.

Ten en cuenta que siempre puedes ajustar esta limitaci贸n y permitir la creaci贸n de cualquier n煤mero de instancias Singleton. El 煤nico fragmento de c贸digo que debe cambiarse es el cuerpo del m茅todo getInstance().

Super excelente clase!

Muy bien

馃槂 entendido

Excelente.

UML: notaci贸n que nos sirve para describir un patr贸n de dise帽o. Es el lenguaje de modelado de sistemas de software m谩s conocido y utilizado en la actualidad.

El patron de dise;o Singleton perteneciente al Creacional permite crear una sola intancia de una sola clase o objeto, determinado esa intancia de forma General en algunos casos podria ser una mala practica.

Es un patr贸n que te asegura que una clase solo tiene una instancia. Esta 煤nica instancia puede ser consumida por cualquier otro objeto.

El 煤nico patr贸n que aprend铆 en la ingenier铆a en la universidad 馃槄

UML, pens茅 que no estaba en uso, y es m谩s com煤n en esta tem谩tica

en Vzla hay 2 gobiernos xd

Singleton => Es un patr贸n que te asegura que una clase solo tiene una instancia.

  • El patr贸n Singleton est谩 dise帽ado para restringir la creaci贸n de objetos pertenecientes a una clase. Instancia 煤nica.

  • Permite la creaci贸n directa de objetos. Es uno de los patrones m谩s comunes y f谩ciles de usar en proyectos peque帽os.

Es un patron que te asegura que una clase solo tiene una instancia. Esta unica Instancia puede ser consumida por cualquier otro objeto. En este caso los objetos su constructor es PRIVADO para que solo pueda haber una instancia y no poder crear una nueva.

CASO DE USO.

Mongoose es una libreria que te ayuda a interactuar con una base de datos en MONGODB. Te provee con una interfaz simple para buscar, escribir y validar datos. En este tipo de libreria solo quieres tener una instancia. En este caso podemos exportar una instancia directamente, esta al provenir del cache siempre va a ofrecer la misma.

  • Es un patr贸n que te asegura que una clase solo tiene una instancia.
  • Esta 煤nica instancia puede ser consumida por cualquier objeto

Estructura

La estructura de una clase para este patr贸n consta de una propiedad privada (y est谩tica) instancia, un m茅todo constructor que tambi茅n es privado y un m茅todo p煤blico y est谩tico para obtener la instancia. Este m茅todo verificar si ya existe una instancia de la clase para regresar esa instancia o crea una nueva si no existe ninguna.

Caso de uso

Moongose es una librer铆a que te ayuda a interactuar con una base de datos de MongoDB. Te provee de una interfaz simple para buscar, escribir y validar datos.

En este tipo de librer铆a solo quieres tener una instancia, porque solo hay una base de datos.

Consejo de vida como lo vieron en el ejemplo de Mongoose, conectar varias veces a la base de datos es innecesario muchas veces, entonces siempre que trabajen en una base de datos en la nube usen la clase de conexi贸n con este patr贸n y eso les ahorrara tiempo de ejecuci贸n para peticiones.
PD: Si se rompe la conexi贸n a la DB el m茅todo getInstace debe estar preparado para lidiar con ese error

Muy bueno!