SINGLETON | PATRONES de DISEÑO
ฝัง
- เผยแพร่เมื่อ 12 พ.ย. 2024
- 👉🏻 Obtén 7 días de trial y 25$ de crédito en UpCloud
👉🏻 upcloud.com/si...
El patrón SINGLETON es uno de los más famosos y más utilizados. En éste vídeo vamos a ver cómo funciona éste patrón de diseño!
Índice de la serie!
👉🏻 • Las PIEZAS FUNDAMENTAL...
The Clean Code Talks - "Global State and Singletons"
👉🏻 • The Clean Code Talks -...
👾 Redes sociales 👾
► Twitter: / bettatech
► Instagram: / betta_tech
► Canal Secundario: / @forkdebettatech
► Slack: bit.ly/33gaDDM
👨🏼🏫 MIS CURSOS 👨🏼🏫
👽 Curso de iniciación a la programación con JavaScript:
► bit.ly/3kr4bTc
👕 MERCHANDISING DEL CANAL:
► Tienda TH-cam: / bettatech
► Tienda Teespring: teespring.com/...
⭐️ AFILIADOS ⭐️
🎁 7% Descuento en HOSTINGER (Código BETTATECH)
► www.hostg.xyz/...
🧠 Autocompletado con IA (Kite)
► www.kite.com/g...
🐾 MacPaw (CleanMyMacX):
► macpaw.audw.ne...
🎵 TODA la música es de EpidemicSound:
► www.epidemicso...
✉️ CONTACTO PROFESIONAL:
► Respuesta no garantizada:
bettatechyt@gmail.com
📚 LIBROS 📚
Design Patterns
► amzn.to/39XuQlq
Head First Design Patterns
► amzn.to/2uq6XUq
Refactoring
► amzn.to/2SQnf2c
Clean Architecture
► amzn.to/3bZVonJ
Clean Code
► amzn.to/32WVKq3
Introduction to Algorithms
► amzn.to/34SyVFP
Cracking the Coding Interview
► amzn.to/2QkdwC6
Soy desarrollador de videojuegos Indie y a lo largo del tiempo me di cuenta que era mucho mejor usar Singletone para manejar los datos del usuario, ademas de las conecciones a bases de datos y carga de niveles, gracias por tu videos estuvo muy bueno
Haz un directo hablando en general de algunos de los patrones de diseño Y como se utilizarían en cada proyecto
Tuve que verlo dos veces porque la primera vez me mantuve ocupado viendo como aumentaba el contador de instacia...
Jjajajajaja pense que era el unico
🤣🤣🤣🤣 Yo igual... solo al comienzo
Yo igual. 😂😂😂😂
Nos creo un “distraerdor” inconscientemente jaja
😂
He utilizado este patrón para realizar un gamemanager, para gestionar los niveles de un videojuego. al momento de cambiar de nivel siempre obtenía el mismo gamemanager.
Muy buen video, estoy al pendiente de está súper serie, saludos desde México
Gracias por tu comentario y el caso de uso de Singleton 😃
Es exactamente el uso que le voy a dar XD
En los manager es muy útil, yo lo use en una clase sesionmanager.
Por ejemplo... Me imagino que el Gamemanager tenia ciertas características sobre los niveles, entonces aplicaste el singleton para aplicar a estas funciones pero desde cualquier nivel. ¿Así funciona?
Me gusta como explica todo, no me canso de ver estas cosas tan básicas pero es que es hermoso
Esa barba pone cachondo a media comunidad
Dios mío, no sabía que me mirábais con esos ojos 😳
Hey aguantaaaaaa..... Digo que es hermoso el mundo de la programación calma calmaaaaa
@@BettaTech La cuarentena los pone mimosos
Challenge 2021: explicar Singleton diciendo la palabra "instancia" menos de 28 veces jaja. Todavía no sé lo suficiente como para sumarme al debate, pero estoy disfrutando mucho esta serie de Patrones de Diseño. Los ejemplos con videojuegos hacen que valga aún más y en el tiempo, cada hora que les dediqué jugando. ¡Gracias por todo!
En lo personal uso muchisimo el patron singleton para la agrupacion de funciones generales. Combinado por ejemplo con patron BLOC en Flutter me permite generar funciones que trascienden a lo largo del arbol de la aplicacion simplificando muchos procesos ya que aunque los widgets se crean y se destruyen a todo momento esta unica instancia administra de forma centralizada un conjunto de habilidades que bien aprovechado puede ser beneficioso para la aplicacion. Ahora, mezclandolo con clases abstractas y mucho polimorfismo reduce "la mucha complicacion" de crer, administrar y depurar el ciclo de vida constantemente. Mas que un simple patron yo diria que es un complemento para otros patrones de diseño que permite administrar variables gobales evitando colisiones entre las mismas (O promoviendolas si eres un cabezota poco disciplinado). Gracias por tus videos.
Muchas gracias, es complejo para mi entenderlo, pero ya me quedo mas claro !
Muy bueno, se entiende muy bien. A este tipo de videos siempre siento que le falta algo como un ejemplo aplicado para que los que recien nos estamos empapando en estas tematicas podamos terminar de cerrar la idea.
Esta muy bien el vídeo. Lo he utilizado para controlar el acceso a recursos compartidos.
Al vídeo le falta para ser redondo, las variantes de singleton para accesos concurrentes, acceso por varios hilos y como controlar esos accesos.
Lo dicho, un buen vídeo, enhorabuena
Este patron lo estoy utilizando en mi proyecto de React-native para manejar la navegación programáticamente
Yo lo he utilizado en conexiones a base de datos como MongoDB y más últimamente ,con un socket que es usado por multitud de clases pero solo tiene que establecer y usar una única conexión.
Justamente este patrón lo estoy utilizando para mi proyecto, buen vídeo.
Gracias!
yo solo lo use en la conexión a la base de datos, es justamente lo que dice en el vídeo, si la instancia ya existe uso la existente...
@@samueltdev Eso mismo estaba pensando.
Muy claro todo! muchas gracias desde Congreso , Argentina!
Chat GPT me dio esta solución, si me funciono, pero no me sentí totalmente comodo usandola sin entender, le solicite explicación pero quede un poco confundido, ahora con tu video explicado de una mera tan sencilla me hizo entender al 100% la solución que implemente a mi proyecto
Muchisimas gracias!!! Me alegra que te haya sido de ayuda :)
Excelente la explicación perfecto para mi vídeo juego, tuve que repetirlo como tres veces, pues es inevitable contar la cantidad de veces que decía la palabra "Instancia"
Que buena explicación, me quedó muy claro.
Gracias!!
Un capo explicando!!!! Simplemente genial!!!!!
Este patron lo estoy viendo en curso de Xamarin que estoy tomando, me parece bastante interesante. ✌
Gracias por el video, esta muy bueno el tema patrones. Quería aclarar a los que no se den cuenta que en el ejemplo que muestra, mas precisamente en el IF, siempre esta retornando una nueva instancia. Para resolver esto el return tiene que ir adentro del IF y fuera del IF otro return null.
No amigo, el código es correcto. El método getInstance nunca debe devolver un null, debe devolver el atributo instance de la clase Singleton, atributo que a su vez también es de la clase Singleton.
La primera vez que se invoca a getInstance, el if se evalúa a true, puesto que el atributo instance es null. Entonces entra en el if, instancia un objeto Singleton y lo asigna a su atributo instance. Finalmente devuelve el objeto instanciado.
Las sucesivas veces que se vuelve invocar a getInstance, el if se evalúa a false, puesto que en la primera invocación ya se instanció el objeto Singleton y se asignó al atributo instance, que por lo tanto ya no es null. Así que ya no entra en el if, y no se vuelve a instanciar nada.
La ejecución sigue y en estas sucesivas ocasiones se devuelve el objeto Singleton, como la primera vez, pero en estas ocasiones ya no fué necesario instanciarlo de nuevo, puesto que ya estaba guardado en el atributo.
Espero haberte aclarado el tema. Saludos.
@@harryhaller4094 claro, creo que ahora entendi. De todas formas copie el codigo del video tal cual y no funciona. Por eso mi comentario.
una chulada de explicación!! felicidades
Gracias! Saludos!
Yo lo estoy utilizando en otro patrón conocido como Unit of Work para instanciar a clases con otros patrones conocidos como Repositorios con los metodos CRUD
Un buen ejemplo del patrón Singleton son los calendarios, ya que, al instanciarlo se llevan a cabo cálculos de de días, semanas, meses, días feriados, etc... Usando este patrón nos aseguramos de instanciarlo una sola vez y así poder usarlo en varias ocasiones sin consumir mas recursos de los necesarios.
Muy bien explicado! Muchas gracias! Felicitaciones.
Me simplificaste el dilema de los patrones, gracias!! Suscrito y 👍a los vídeos, cuando hay más?
Genio Martin, gracias por el contenido de calidad
Gracias a vosotros por ver mis vídeos! :D
Muchas gracias por el video, y muy comico el contador de instancia jajajajaja
Capo me resolviste algunas dudas..
Excelente explicación! Muchas gracias ⭐️
El singleton pattern es como una hacha. Es igual de útil como arma que como herramienta... Sólo está en las manos del arquitecto hacer un buen uso de éste.
Precisamente tuve un caso para un mapper global con la relación llave_typo de dentro de un factory, cuando corría los test, se comportaba raro porque las pruebas unitarias corrían en paralelo y la inicializacion de la instancia y su mock se tranlapaban pues todos veían la misma instancia y por tanto se afectaban entre ellas y fallaba uno u otro test dependiendo quien ejecutaba antes.
Precisamente tuve que hacer una bandera para indicar cuando debía comportar de forma natural y cuando como test.
Excelente explicación, muchas gracias!!!!!!!!!!!!
jajja, no me pude concentrar en el video, tratando contar las palabras de "instancia" jaja. lo veré de nuevo. muchas gracias por el video...
Una pregunta. Es buena idea usar este patrón para la conexión a base de datos?
Que problemas podría traer?
Gracias pela, sos crack, videos cortos y claros
Gracias por el video, crees que podrias hacer algun tipo de ejemplificacion? Se que es un video de hace rato y no estoy seguro si tienes otro de este patron.
Me sumo a este pedido
¿Podrías subir más explicaciones sobre más patrones de diseño? Lo explicas de lujo.
Gran vídeo !! muy buena explicación
Excelente video, gracias por explicarlo.
Excelente explicación me ha quedado clarisimo y eso que no hiciste un ejemplo programando.
Tus videos sin excelentes! Muchas gracias!
Explicado 10/10, AAA, vamos perfecto!
yo resien estoy estudiando pero me parece interesante ya que este patron sirve para poder acceder sin hacer varias instancias y asi poder tener acceso a otros lados pero interesante y muy creativo ya que es como si fuera un atajo
instancia++
Zenemij muy bueno
Hola, queria comentar que al poder crear una sola instancia basta con un tipo de dato boolean iniciado en false y en el constructor setearlo en true. Ejemplo: private static boolean thereIsAnInstance = false;(java) .. Un contador no seria necesario ya que no va a existir mas de 1 instancia.
El patrón singleton lo tengo claro, pero no tanto que es una instancia :P
@@compraenchina2010 cuando crea un objeto de x clase se dice que lo instancias , darle vida a.la.csse.instanciando una entidad de dicha clase
Eso de ir contando las veces que nombras "instancia" es una gran distracción.
Exactamente, me centraba más en tratar de escuchar la palabra instancia que en entender el video
Hay un poco de video en tus instancias :P jajaja Genial el video!.
Siempre que me he visto tentado a usar Singleton he podido reescribir la clase como abstracta con métodos estáticos. Diría sin embargo que Singleton puede ser más útil que una clase abstracta si la construcción de la clase fuera lenta. En ese caso, sería beneficioso ahorrarse la llamada al constructor hasta que se lo necesite.
Muchas gracias, un video muy bien instanciado ... perdon, quise decir muy bien explicado xD
Excelente esta serie de videos!
¿Cada cuanto sale uno nuevo?
Voy a estar atento!
Gracias por compartir el conocimiento
Está muy buena la explicación. Y creo que es un antipatrón.
Un tema que me gustaría que algún día expongas sería los pros y contras de clases vs factorías. Me parece interesante para la comunidad analizar esto
Ese es mi patron preferido.
Muy bien explicado y detallado! Me ha gustado mucho el vídeo. Un sub mas
Gracias! 😊
Antes de ver el video le di LIKE. Excelentes videos
Esa remera es fantastica
Un ejemplo de uso de Singleton interesante es el del lenguaje Smalltalk con la clase True y False
Solo hay una instancia "true" y "false"
Excelente video. Una sugerencia, no pongas elementos que distraigan a tu público. En mi caso me desconcentra el contador instancia. Saludos
Puedes hacer un video con Santaolla hablando de WOLFRAM?
El uso fundamental del patrón es el uso compartido de un recurso como por ejemplo en una aplicacion web, tener 1 una única conexión a base de datos y no tantas como sesiones abiertas. El recurso (instancia) no depende de la sesión, solo la utiliza, todas las sesiones usan la misma instancia de acceso a base de datos, o de acceso a cola de mensajería. Se puede gestionar en modo pool de N instancias concretas, pero no tendría sentido que cada sesión creara una instancia a base de datos. En el ámbito Enterprise es el uso habitual e integrado en todos los frameworks de backend.
Waooo interesante video! Gracias.
Gracias a ti! 🤩
buena explicacion.
Un gran vídeo y muy bien explicado “No puedes ir instanciando por ahí como si no pasara nada” 🤣
Muchas gracias!!
Muy buen video, gracias
Gracias por comentar!!
Justo vi esto en Platzi xd
Patrón Decorator el siguiente porfa 👌🤘🙏🙏
Me gustaría saber más de sobre arquitectura de software. Saludos desde México.
Sin querer me di con este video y tu canal, lo explicas de una forma sencilla!, mi duda es recomendarias singleton para una aplicacion restful ?
Yo lo he utilizado con node, de crear una sola instancia del servidor y la configuración.
La recursividad de las instancias. Martin, como me puedo poner en contacto contigo?
BUEN VIDEO KRATOS TIERNO.
En un curso que hice me dijeron que el mayor uso sería usarlo para la sesión de un usuario.
Grande Martín.
Grandes vosotros!
Solo por curiosidad, no se podría verificar la existencia de la instancia en el constructor? (y así poder dejarlo como público).
Hay patrones de diseño para la programación funcional??
Será recomendable utilizar singleton para las listas (ej. Países, Ciudades, etc) en las vistas? Lo digo por la cuestión de performance.
Gracias por el video. Eso sí, sería todavía mejor el vídeo si pusieras también el código para C++ ;)
Bueno aun no lo he usado , pero creo que para las clases repositorios que implementan una interfaz, creo que estaría bien.
Haz uno de cadena de responsabilidad
Soy nuevo en lo relacionado a la arquitectura de software. Singelton sería un patrón recomendado para implementarlo en una clase contexto de una base de datos?
Hola, te queria preguntar por ese fondo de pantalla tan chulo que tienes?. De qué es?
BettaTech es como un patron porque como le va con las mujeres siempre sera un singleton
tan chevere
No lo considero un anti patrón. Pero si que creo que a veces se abusa, utilizándose en situaciones en las que no se debería implementar. Si lo vas a usar, piénsalo dos veces y mucho cuidado si tu aplicación es multithread o accedida de forma simultánea por varios clientes
hater_mode = on
- aunque el código es simple, no es thread-safe, así que si tienes mala suerte (y por ley de Murphy la tendrás) en algún momento existirá más de una instancia. Sin embargo, detectar un error de esos es muy difícil por no decir que imposible e irreproducible.
- la variable instance debería ser final para evitar ese tipo de errores; el precio es que hay que sacrificar el lazy-load
hater_mode = off
Para mí el problema con todo tipo de patrones de diseño es que hay gente que aprende uno nuevo, y lo usa en los próximos proyectos a diestra y siniestra sin considerar pros y contras
El problema de sincronización de threads en la creación de la instancia se puede solucionar utilizando primitivas acorde al lenguaje (por ejemplo, el synchronized de Java junto al uso de locks).
En los ejemplos dados no puede darse este problema ya que se esta utilizando JS que es single-threaded.
De todas maneras no recomiendo el uso de un Singleton, y mucho menos en aplicaciones con múltiples hilos.
Llevo años usándolo pero para el control de recursos en el servidor, cada que se crea un objeto consume recursos, memoria, procesador y más cuando tratas con millones de registros en BD.
UNA preguntilla... Usarías Singleton para tener un objeto con las configuraciones del programa?... Es decir una configuración en yaml, que cargas al inicio de la ejecución, y que te quieres olvidar de andar pasando de objeto a objeto ... Crear una clase "config" Singleton, que mapee ese yaml y que puedas recuperar, siempre igual en todo to programa? Algo así como un state management?
Mi experiencia con los archivos de configuración se resume en dos acercamientos.
Lees el archivo cada vez que quieras acceder a una configuración. Para que esto sea viable deberías ser capaz de leer la configuración sin pérdida de tiempo. Si la lectura no es muy rápida pero necesitas acceder a una configuración muchas veces seguidas, léela y guárdala como variable local.
La otra opción (más parecida a un Singleton) es usar una clase abstracta. No sé qué lenguaje usarás. En Python puedes leer la configuración al iniciar el programa y guardarla en memoria RAM en una clase.
es como usar helpers?
Yo en tareas lo estuve utilizando para clases controladoras para escribir en XML, o alguna base de datos, ahora no se si hice mal, no sabía que había controversia sobre este patrón (ojo, que soy estudiante). Mis profesores nunca me han puesto pegas. ¿Qué opinas?
Un saludo!
P.D. Me he quedado con las ganas de que llegaras a 40 xD.
Yo había usado clases staticas para manejar datos globales y moverlos de un lado a otro, ahora veo que el singleton seria lo mejor xd
Hola! Me podrías recomendar libros/videos/curso para poder aprender/mejorar en algoritmia para poder resolver problemas :).
Un saludo y gracias!
Un ejemplo de singleton podría considerarse una conexión a una base de datos? Es decir ya no se solicitaría constantemente un ID de conexión, solo mantener el mismo, solo bastaría cerrar y abrir la conexión
Si. Yo lo utilizaba en php. Abría la conexión, realizaba las operaciones necesarias y la cerraba
Es una herramienta y como tal hay que usarla donde será útil
Todo bien, hasta que python te da metaclases con las que puedes controlar la instanciación de las instancias de tu clase con mucho más detalle.
Hola podrías crear un video para el patrón observer?
¿Dónde encuentro esa camiseta? Está increíble.
Es parte del merchandising del canal! Deberias verla debajo de los videos 😄
Pues en Unity se suele usar para la instancia del game manager, así al cambiar de escena no se vuelve a crear uno, no sé si eso es óptimo
Hola que tal, creo que como toda herramienta tiene su uso y esta es de las cuales apuntaría a algo un poco especifica, me parece que se lo ve como antipatron por el hecho de que es eso una herramienta una forma que se debe usar en cosas especificas y claro esta siempre va a depender de la app que estemos creando. En lo personal no descato su uso su aplicacion es mejor decir lo conosco se que hace, que no y sus consecuencias entonces ver si me sirve aplicarlo o no, cero ese es el razonamiento que tenemos que tener. Bueno un saludo a la comunidad y decir que el video esta muy bueno.
Tuve que verlo dos veces una para contar la veces que decias instancia y otra para entender el video 😅😅
Me he dejado alguna INSTANCIA? 🤭
Una critica constructiva, es que en un video académico (no de comedia) la broma de contar la cantidad de veces que dijiste instancia si bien es graciosa a la vez es distractiva ya que estás intentando aprender un concepto y existe un chiste en segundo plano. Con la aclaración del principio me parece suficiente, de ahí en adelante excelente video!
Gracias por el feedback! Creo que en los vídeos siguientes lo tomé en cuenta y estarán mejor :) Gracias!!!
creo que se olvido mencionar que en la estructura de datos en java esta la memoria head y la memoria stack donde hace referencia a las memorias de las instancias de los objetos singlenton tambien sirve para no saturar la memoria stack de la ram... en jvm. saludos...
no, por que el video no esta enfocado a java
Lo está haciendo en typescript
Segundo comentario, tus vídeos son excelentes colega
Gracias! 😊 Me animáis muchísimo!!!
Hola soy nuevo en esto y hay una cosa que no entiendo que es lo que hace exactamente "instance : singletone" es como un = en este caso ?
Porque cuando busco usos del op ternario seria como para un if else si alguien puede responder se agradece