“Single” en inglés es “sencillo” (o soltero ¬w¬) así que se puede recordar si se asocia con su significado “Singleton” vendría a ser un objeto o instancia “solterona”.
Introducción
¿Qué significa ser un profesional de JavaScript?
Aspectos que destacan a un profesional
Inicio del proyecto
Repaso de Conceptos Fundamentales
Cómo llega un script al navegador
Scope
Closures
El primer plugin
this
Los métodos call, apply y bind
Prototype
Herencia Prototipal
Cómo funciona JavaScript
Parsers y el Abstract Syntax Tree
Abstract Syntax Tree en Práctica
Cómo funciona el JavaScript Engine
Event Loop
Fundamentos Intermedios
Promesas
Getters y setters
Fundamentos Avanzados
Proxy
Generators
APIs del DOM
Fetch - Cómo cancelar peticiones
IntersectionObserver
VisibilityChange
Service Workers
TypeScript
Introducción
Tipos básicos
Funciones
Interfaces
Clases
Convertir el proyecto a TypeScript
Patrones de Diseño
Qué es un patrón de diseño
Categorías de patrones de diseño
Patrón Singleton y Casos de Uso
Implementación del patrón Singleton
¿Cómo funciona el Patrón Observer?
Implementación del patrón Observer
Casos de Uso del patrón Observer: Redux
Patrón Decorator y Casos de Uso
Implementación del patrón Decorator
Proyecto: MediaPlayer
Implementación de plugin de Ads: Desplegando en consola
Implementación de plugin de Ads: Desplegando en pantalla
Publicar en npm
Conclusiones
Conclusiones
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
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
“Single” en inglés es “sencillo” (o soltero ¬w¬) así que se puede recordar si se asocia con su significado “Singleton” vendría a ser un objeto o instancia “solterona”.
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:
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 “mé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 “Cachea” ? 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.
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.
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.
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!
Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.