Patrón DECORATOR con CÓDIGO | Ejemplo REAL

Поділитися
Вставка
  • Опубліковано 15 гру 2024

КОМЕНТАРІ • 126

  • @BettaTech
    @BettaTech  4 роки тому +31

    Os dejo el repositorio aquí por si os lo queréis bajar o cotillear!!
    github.com/martincrb/decorator-design-pattern

    • @armandopereztorres8695
      @armandopereztorres8695 2 роки тому +1

      Veo este video y me imagino Plants Vs Zombies. Excelente explicación! Felicidades!

  • @xavierll
    @xavierll 4 роки тому +94

    Toda la serie de Patrones tendría que tener este enfoque! Y si mediante edición se pudiese ver la implementación vs su UML sería ya de 10!

    • @BettaTech
      @BettaTech  4 роки тому +20

      Por eso siempre intento poner el UML con el "código" en la imagen en vez de simples "cajitas"... sólo que quizá es más difícil de leer jaja

  • @patousarg
    @patousarg 4 роки тому +3

    Quería felicitarte Martin, por tus videos.
    Lográs explicar en no más de 15 minutos, muchos conceptos que llevan quizás un semestre entero para comprender. No sólo los explicas con claridad, si no también que agregas ejemplos concretos! Felicitaciones por eso.
    Algo para aportar a tu video... Es que podrías continuar el ejemplo y explicar composite con ataques de un hero =)
    Saludos desde Argentina

  • @gustavovalmana5360
    @gustavovalmana5360 11 місяців тому +1

    Entendí perfectamente y pude relacionarlo con un codigo de pagos, dónde tienes un pago con una cantidad inicial y le aplicas decoradores para aplicar descuentos o aumentos al valor inicial, como cada pago decorado sigue siendo un pago entonces puedes hacer lo mismo que haces con todos los pagos como pagar, cancelar, posponer, etc.

  • @Maisonier
    @Maisonier 4 роки тому +7

    Estos videos son buenísimos. Recomendadisimo a todos mis contactos.

  • @Jorge150CL
    @Jorge150CL 4 роки тому

    Excelente, a veces el trabajo nos convierte en máquinas y nos aleja de la tan necesaria abstracción para resolver problemas. Videos como estos ayudan a entender los problemas desde otro enfoque y entender cómo funcionan las librerías que usamos. Buenos videos.

  • @pablosanz5037
    @pablosanz5037 4 роки тому

    Mucho más claro así. Este patrón creo que necesitaba esta explicación extra. Gracias!

  • @antonioitsolutions8792
    @antonioitsolutions8792 4 роки тому

    Super super útil, los demás patrones de la serie deberían tener un video así, mis dieses

  • @asaelJBmedina
    @asaelJBmedina 4 роки тому

    Me quedo muy claro con ese ejemplo el patrón decorador y un gran plus que lo explicaste con TS, y compilando usando deno. Excelente aporte!

  •  4 роки тому

    Buenísimo, y el final viendo cómo lo implementa la API de java fué lo mejor. Yo creo que conociendo los patrones de diseño populares y sabiendo cómo las librerías o APIs de los lenguajes lo implementan sería mucho más fácil aprender a usar un lenguaje con sus librerías de manera más apropiada. Siempre me he preguntado por qué las librerías o APIs no se enseñan a usar con patrones de diseño. En verdad creo que los patrones ayudan mucho a ser mejor programador. Yo soy fan de los patrones desde que los conocí y poco a poco intento implementarlos. Te agradezco el video.

  • @idroj07
    @idroj07 4 роки тому

    Super ilustrativo! con una explicación así, más pausada y con código real se entiende mucho mejor. Gracias!

  • @sleter2929
    @sleter2929 3 роки тому

    madre mia los patrones, como pude programar sin ellos

  • @noffsmith9906
    @noffsmith9906 4 роки тому

    Lo máximo bro, viendo tus videos he entendió una cantidad de cosas que hasta ahora no lograba entender ...

  • @DannyMatarrita
    @DannyMatarrita 3 роки тому

    Estoy iniciando con programación web y me encantan la forma en que explicas !

  • @yonatanaquinteror2989
    @yonatanaquinteror2989 4 роки тому

    Muchas gracias, con código de ejemplo se entiende más que solo teoría

  • @togacentral
    @togacentral 2 роки тому

    Excelente explicación y demostración muchas gracias por compartir tu conocimiento. Saludos...

  • @andreslopez2804
    @andreslopez2804 4 роки тому

    Este enfoque práctico con codigo es increíble para este tipo de videos sobre patrones de diseño, gracias por todo tu trabajo Martín, sigue asi👏👏👏

  • @vaandarken
    @vaandarken 4 роки тому

    Excelente video
    deberías continuar con éste formato para los demás patrones de diseño
    Gracias

  • @Jocker88
    @Jocker88 4 роки тому +2

    Genial vídeo, si lo haces con los diferentes patrones sería magnifico. Aún que el tema de patrones es largo (hay muchos) ver su implementación después de la teoría, es simplemente magnifico.
    Un saludo.

  • @KelvinVelasquez
    @KelvinVelasquez 3 роки тому

    Me impresiona como maneja el concepto para en base al concepto saber que logia usar por eso es importante saber bien la teoria.

  • @antoniodesousabarroso7945
    @antoniodesousabarroso7945 3 роки тому

    Hola, gracias por compartir tus conocimientos y ser tan buen divulgador.

  • @Max-gt8hi
    @Max-gt8hi 4 роки тому

    Muchas gracias, excelente explicación... saludos. Tienes razón, con código real se entiende mejor.

  • @luistalavera6392
    @luistalavera6392 4 роки тому

    Uffff, excelente explicación se nota el dominio de los conceptos de programación. Muchas felicidades por tan buen video.

  • @HAL-9000-
    @HAL-9000- 4 роки тому

    En código real es mucho mejor, gracías!

  • @googleuser9422
    @googleuser9422 4 роки тому +6

    Muy bueno! Lo entendi mucho mejor ahora :D

    • @BettaTech
      @BettaTech  4 роки тому +2

      Gracias!! Lo importante es que quede claro 😊 Me alegra que te haya sido útil!

  • @multimastermas
    @multimastermas 4 роки тому

    Hermano has tardado mucho en subir esta serie. Mañana tengo examen de Diseño de Sistemas Software de la Universidad y me entra todo este tema. Wish me luck xD

  • @iorch82
    @iorch82 4 роки тому

    Muy bien explicado, un patrón muy bonito. Explicado mejor incluso que el libro HeadFirst que tienes ahí atrás :)

  • @carlitosmo
    @carlitosmo 4 роки тому

    hola, te sigo porque tus videos son interesantísimos, he aprendido mas como profesional, no son los típicos crud de UA-cam, me gustaría saber en que sistema empresarial podrías aplicar un diseño así.

  • @danielquirospicado431
    @danielquirospicado431 4 роки тому

    Excelente ejemplo de patrón, muy claro,crack 👍haces videos muy buenos

  • @doncarlos212
    @doncarlos212 4 роки тому

    Muy buen vídeo, me ha gustado mucho, me gustaría que siguieras tratando temas tan interesantes y también que hicieras algún vídeo de libros o recomendaciones para ser mejores programadores.

  • @johnd.gomezh.1413
    @johnd.gomezh.1413 4 роки тому

    Muchas gracias por todos los vídeos que publica. Me encantaría ver un vídeo sobre inyección de dependencias y ejemplos en typescript(javascript) si fuera posible.

  • @nikensss
    @nikensss 4 роки тому

    El otro video se quedo muy teorico. Aqui se ve todo muy claro! :D

  • @danielpacheco2520
    @danielpacheco2520 Рік тому

    Que brutal esa informacion, no puedo decir mas. 10/10

  • @Magistrado1914
    @Magistrado1914 4 роки тому

    Excelente explicación
    Visto en 11/06/2020

  • @alvarocisneros1648
    @alvarocisneros1648 3 роки тому

    Todo muy claro. Muchas gracias.

  • @carloscastaneda3169
    @carloscastaneda3169 4 роки тому

    Excelente trabajo! Admirable el gusto por compartir conocimiento.

  • @danielsaenzdecoscalacalle6669
    @danielsaenzdecoscalacalle6669 2 роки тому

    Muy buena explicación. Gracias!

  • @alex148m
    @alex148m Рік тому

    muchas gracias por el video, muy bien explicado, un saludo!!

  • @tachuela2able
    @tachuela2able 4 роки тому

    Excelente video con una explicación súper clara. ¡Muchas gracias por tan buen video!

    • @BettaTech
      @BettaTech  4 роки тому

      Gracias a ti por verme! :D

  • @BrendaaaSanchez
    @BrendaaaSanchez 4 роки тому +1

    Una genialidad 🙋‍♀️

  • @ricardo-rector
    @ricardo-rector 4 роки тому

    Super explicado, creo que seria bueno que de la misma forma explicaras los anteriores.

  • @erickhilario6217
    @erickhilario6217 4 роки тому +22

    LIKE PARA QUE LO VEA
    Podrías hacer uno haciendo un pequeño proyecto y explicar los principios solid ampliamente por favor!

  • @angelyesidmondragonrodrigu6878
    @angelyesidmondragonrodrigu6878 4 роки тому

    Que buen video amigo , gracias por compartir tu conocimiento

  • @buhotecnologico4756
    @buhotecnologico4756 4 роки тому

    Más aplicaciones de patrones con código por favor, muy buenos tus videos!

  • @Rekefa
    @Rekefa 4 роки тому

    Muchas gracias por estos buenos videos BettaTech! Sigue así con el buen contenido se te apoya siempre desde Nicaragua.

    • @BettaTech
      @BettaTech  4 роки тому +2

      Gracias Rekefa! Saludos a todos desde aquí!! :D

  • @ezequielgonzalez656
    @ezequielgonzalez656 4 роки тому +1

    Simplemente gracias !!

  • @sodark86
    @sodark86 2 роки тому

    El problema que veo aqui es que tienes un orden al fin y al cabo. Independientemente al Enemy le pognas primero un casco y luego una armadura o al reves, primero una armadura y luego un casco. Me refiero, que si tienes el ejemplo de casco y luego armadura, para quitarle el casco o bien haces un getter para que el Decorator te devuelva el enemy interno o obligas a romper primero la armadura para luego romper el casco.
    Sería posible tener un ArrayList de decorators al enemy y que en cada ataque, se recorra dicho array calculando el daño? De esta forma si le rompes el casco, recorres el array de decorators y haces un pop(). Así en la siguiente iteración ese decorator ya no suma a la defensa.

  • @rubenrios5010
    @rubenrios5010 4 роки тому +7

    Hola! una pregunta, como añadirías un orden a esos decoradores? por ejemplo en este caso son divisiones y por tanto el orden da igual, pero en el caso de que hubiera una suma/resta y luego una multiplicación o división, ahí sí que afectaría el orden, que se podría hacer en esa situación? un saludo y gracias por tus videos!!

  • @javigarcia-ripoll6578
    @javigarcia-ripoll6578 4 роки тому

    ¡Me ha encantado el vídeo! Tu voz se parece un montón a la de MoureDev 🤯😂

  • @FlightgearTutorials
    @FlightgearTutorials 4 роки тому

    En el ejemplo anterior que puse, se cumple exactamente la misma funcionalidad sin crear interfaces ni herencia y sin crear una clase para cada combinacion de capas. Al crear un enemigo base este recibe todo el daño de un ataque. Al añadir un objeto Helmet a la coleccion de decoradores del enemigo, el Helmet disminuye 10 puntos del ataque recibido, lo mismo con un enemigo que al añadir un objeto Armour a su coleccion que en el ejemplo que puse disminuye 25 puntos. Y por supuesto la coleccion puede tener añadidas tanto un objeto Helmet como un objeto Armour. Que el enemigo que tenga una configuracion tendria una resistencia de 35 puntos (10 + 25).

  • @_matias2023
    @_matias2023 4 роки тому

    Muy buena explicación!

  • @JoseMartinez-pl4do
    @JoseMartinez-pl4do 4 роки тому

    Muy buen vídeo, usando código para detallar el uso del patrón, y una duda que me surge es que tan recomendable es usar un patrón de diseño cuando ya hay mucho código avanzado, gracias por esta serie de patrones de diseño, que desde que los vi en la carrera me encantaron.

  • @javierquirozgalindo664
    @javierquirozgalindo664 4 роки тому

    Excelente ejemplo!

  • @KeenkiDash
    @KeenkiDash 4 роки тому

    7:50 el método takeDamage() de la clase abstracta EnemyDecorator podría (debería) ser abstracto. Las mismas implementaciones concretas de EnemyDecorator van a implementar dicho método. Te ahorras el boilerplate de la implementación de un método que nunca será invocado.

    • @BettaTech
      @BettaTech  4 роки тому

      Totalmente! Se me pasó por alto :)

  • @rjfortis5415
    @rjfortis5415 4 роки тому

    Eres un genio! Excelente contenido!

    • @BettaTech
      @BettaTech  4 роки тому +2

      Muchas gracias! 😄

  • @FlightgearTutorials
    @FlightgearTutorials 4 роки тому +1

    Wow verdaderamente ahora queda mucho mas claro y no con tanta teoria que nos hacen creer los organismos publicos.
    Lo unico que me surgio fue una duda y es que diferencia habria entre usar esta arquitectura y usar listados/colecciones. Ejemplo:
    Clase Enemy:
    Dim Decorators as New Collection
    Public function ComputeDamage()
    For each decorator in Decorators
    vDamage = decorator.setDamage(vDamage)
    Next
    ComputeDamage = vDamage
    End Function
    Clase Helmet:
    Function SetDamage(pDamage)
    SetDamage = pDamage - 10
    End Function
    Clase Armour:
    Function SetDamage(pDamage)
    SetDamage = pDamage - 25
    End Function
    Y finalmente para decorar al Enemigo:
    BaseEnemy = new Enemy
    BaseEnemy.Decorators.Add new Helmet
    BaseEnemy.Decorators.Add new Armour

    • @BettaTech
      @BettaTech  4 роки тому +1

      En este caso de uso tu método es totalmente válido 😀 La diferencia es que con Decorator no necesitas "modificar" el componentes que va a ser decorado. Me explico. En tu ejemplo funciona porque Enemy tiene conocimiento que va a recibir decoradores. Pero imaginate que quieres decorar clases que no son tuyas, que son de una librería o que son de sistema y por lo tanto no puedes acceder a su implementación para añadir esa lógica...
      Gracias por el comentario!

    • @FlightgearTutorials
      @FlightgearTutorials 4 роки тому

      @@BettaTech Wow gracias por la increiblemente rapida respuesta. Y tambien por la aclaracion. Ahora soy mucho mas consciente de cuando usar uno y otro. :) Ahora vivo en un mundo de luz y color jejejeje mil gracias

  • @STR1451
    @STR1451 2 роки тому

    Muchas gracias amigo !

  • @Victorneado
    @Victorneado 4 роки тому

    Muy bueno el ejemplo final de aplicación sobre las clases de InputStream en la API de Java. ¿Tiene este patrón algo que ver con el paradigma AOP que implementa el framework Spring por ejemplo? Muchas gracias, utilísimo tu canal.

  • @alexisrivas433
    @alexisrivas433 2 роки тому

    capo se entedio perfecto, gracias

  • @brandonlopez6328
    @brandonlopez6328 Рік тому

    Bárbaro, buenisimo

  • @LuisGarcia-cm9hz
    @LuisGarcia-cm9hz 2 роки тому

    a mi me sale como si no existiera mi variable protected enemy en HelmetDecorator es como q no entendiera q extendi desde EnemyDecorator.. Es algo de mi editor VS o es algun plugin q me podria estar faltando? como tienes configurado tu VS para trabajar con TS? que me recomiendas?

  • @victornaranjo3827
    @victornaranjo3827 4 роки тому

    Hola amigo , un saludo! ¿Que tal una serie sobre arquitectura de software ? estaría buenísimo

  • @erickhilario6217
    @erickhilario6217 4 роки тому +1

    Qué libro recomiendas para aprender patrones de diseño ?

  • @PabloHelal
    @PabloHelal 4 роки тому

    Muchas gracias.

  • @robertosanchezduarte
    @robertosanchezduarte Рік тому

    Gracias muy bueno!

  • @inmutante
    @inmutante 4 роки тому

    Muy buen vídeo, como todos los de esta serie de patrones.
    Sólo me surge una duda en el ejemplo, entiendo que es un ejemplo pero... En estos ejemplos concretos en caso de que quiten el casco de un golpe...¿Cómo quitas de ese enemy ese decorador?

  • @elkatedratico
    @elkatedratico 4 роки тому

    Ahora si entendí!!! ☺

  • @ruben3137
    @ruben3137 4 роки тому

    No sabia que Caradechiste haga videos de programación v:

  • @fermunoz8884
    @fermunoz8884 Місяць тому

    Qué tema de vscode tenías en ese momento?

  • @chiptunesfreemusic5040
    @chiptunesfreemusic5040 4 роки тому +2

    Cuando usas los dos puntos, : , por ejemplo takeDamage() : number, eso es solo porque es una interface o siempre que uses class y un método le puedes poner eso? , es como definir el tipo de valor que va a regresar, o con el que va a trabajar internamente? gracias por estos videos

    • @BettaTech
      @BettaTech  4 роки тому +1

      Indica el tipo del valor de retorno de la funcion 😊

    • @chiptunesfreemusic5040
      @chiptunesfreemusic5040 4 роки тому

      @@BettaTech Ah, gracias buen hombre.

  • @DanielAlvarez-rq5vu
    @DanielAlvarez-rq5vu 3 роки тому

    Que tema es el que tienes en el visual studio code.?

  • @terry-
    @terry- Рік тому +1

    Con este patrón, cómo sería para sacar un decorador? O sea si lo decoré 2, 3 o 4 veces, como se haría para sacarle el decorador 3, que sería solamente el casco por ejemplo?

  • @sergiodavidpaezsuarez559
    @sergiodavidpaezsuarez559 4 роки тому +1

    ¿Qué tema usas en vs code?

  • @Mecolo
    @Mecolo 4 роки тому

    Que theme usas para vs code, esta chevere !

  • @romeobetances7964
    @romeobetances7964 4 роки тому

    BettaTerch, haga un video sobre este patrón pero con Unity y C#.

  • @Neunapp
    @Neunapp 4 роки тому

    Este patrón se entiende aun mucho mas en Python.

  • @otharwaotharwa1462
    @otharwaotharwa1462 4 роки тому

    Me gustaria saber que plugins usas para el VSCode.
    La verdad es que al ver esta explicación me dieron muchas ganas de empezar a jugar de nuevo con TypeScrypt.
    Gracias

    • @otharwaotharwa1462
      @otharwaotharwa1462 4 роки тому

      Otra cosa mas. De los libros que recomendas, ¿Sabes si existen versiones en Español? y de ser el caso, ¿Los recomendarías o te parece mejor leerlos directamente en Ingles ?

  • @adri.sglega
    @adri.sglega 4 роки тому

    Buen video :)
    tengo una pregunta,
    ya se que este video es para explicar el patron decorador.
    Pero en este caso no es mejor darle al Enemy un objeto que sea casco o armadura??

  • @klapx8499
    @klapx8499 4 роки тому

    Muchas gracias!!

    • @BettaTech
      @BettaTech  4 роки тому

      Gracias por comentar!!!!

  • @barbieroalex
    @barbieroalex 4 роки тому

    excelente gracias!

  • @NicolasAlbamurillo
    @NicolasAlbamurillo 3 роки тому +1

    Si tengo un objeto con varios decoradores, como puedo quitar un decorador del medio?

  • @juliocesarbenitezc.1467
    @juliocesarbenitezc.1467 4 роки тому

    gracias.

  • @anthonysuarez9895
    @anthonysuarez9895 4 роки тому

    Tienes algun video explicando MVC?

  • @hugomauleongonzalez7940
    @hugomauleongonzalez7940 4 роки тому

    Gracias.

  • @-_Marcos_-
    @-_Marcos_- 9 місяців тому

    ¿Es posible comprobar si ya existe un decorador aplicado? ¿es posible ordenar el orden de las decoraciones aplicadas?

  • @diegomasis9665
    @diegomasis9665 2 роки тому

    Diay si...... no hay una explosión de clases de enemigos pero hay una explosión de clases decoradoras 🤣🤣🤣

  • @pedrorrivero
    @pedrorrivero 4 роки тому +1

    Y cómo harías si quieres quitar decoradores a un objeto ya instanciado?

  • @devlegacymx
    @devlegacymx 4 роки тому

    Excelente explicación y ejemplo, como diría Shrek, los decoradores son como las cebollas, tienen capas

  • @johncerpa3782
    @johncerpa3782 4 роки тому

    Buen video

  • @EzequielRegaldo
    @EzequielRegaldo 4 роки тому

    Gracias por el aporte ! una lástima lo de ts y deno D: (odio mucho, mucho, demasiado TS) pero lo más importante es el concepto y la sabiduría de la implementación lo cual hace que reste total importancia. Nuevamente gracias por todo

    • @TheMemin247
      @TheMemin247 4 роки тому

      Odiar lenguajes es de simps

  • @elvis_gastelum
    @elvis_gastelum 4 роки тому

    Un poco fuera del tema... me encanta el hecho de que ahora se deje mucho más fácil empezar a trabajar con ts directamente en deno, no creo que sea el killer pero si la alternativa que le hacia falta a node

  • @felipesaldias495
    @felipesaldias495 4 роки тому

    Y el composite para cuando? :-)

  • @JesusGil90
    @JesusGil90 4 роки тому +1

    y para quitarle el casco?

  • @maikelrodriguez1142
    @maikelrodriguez1142 Рік тому

    estoy estudiandome el libro Head First Design Patterns de Eric Freeman
    Elisabeth Freeman , vi este video pero noto que no haces en python con visual code ninguno de los otros patrones EN CODIGO, se agradecería .

  • @luisluisferreira22
    @luisluisferreira22 4 роки тому

    Buenos videos, pero se complican a mi parecer poniendo siempre como ejemplo juegos. Me parece más fácil poner ejemplos de ventas de una tienda o cosas más cotidianas y no tan rebuscadas...... a mi parecer.

  • @JosanL
    @JosanL 4 роки тому

    Es un poco rebuscado, sobre todo al entender el resultado al montarlo todo por lo que dices de las capas de una cebolla (parecido a recursividad), no está mal el patrón.
    Pero tengo una duda, como cada clase decorada tiene dentro una clase "base", al tener varias capas, ¿no se instanciarían muchas clases intermedias que pudieran ocasionar problemas de memoria? Por ejemplo 10 capas serían 10 o 11 objetos en memoria para un solo enemigo... supongo que apenas se notaría, ni siquiera a escala, más allá del propio cálculo. ¿Qué dice la ciencia?

  • @sergi2204
    @sergi2204 4 роки тому

    No entiendo muy bien la funcionalidad. Tú en tiempo de compilación dices que compute el daño el enemigo con armadura y casco no? ¿Pero y para hacerlo en tiempo de ejecución?
    Siguiendo el mismo ejemplo, a la hora de que un enemigo haga daño al jugador, no vas a saber fijo si el jugador tiene armadura, casco o lo que sea. Como usas el patrón entonces?

  • @adrisongomez6482
    @adrisongomez6482 4 роки тому

    Ahora que me doy cuenta, que es explicas tus emplos de codigo como BDD. Osea piensas y codificas como quiere que tu codigo actue y luego codificas para que eso que escribiste funcione...

  • @chiptunesfreemusic5040
    @chiptunesfreemusic5040 4 роки тому

    Cómo se llama el estilo de tu visual studio? xdxd

  • @rafaelpereiraarias
    @rafaelpereiraarias 4 роки тому

    Primer comentario