Curso de Patrones de diseño - 3 Fábrica

Поділитися
Вставка
  • Опубліковано 30 січ 2025

КОМЕНТАРІ • 97

  • @manudokiller
    @manudokiller 4 роки тому +26

    Te digo algo muy sencillo: De todo lo que he buscado para entender el tema, eres el único que lo ha sabido explicar bien, el resto de videos que he visto hablan pura basura y no explican bien cómo funciona... Excelente... Saludos

  • @luis96xd
    @luis96xd Рік тому +2

    Hoy en un proyecto que estoy trabajando, me di cuenta que necesitaba una fábrica porque cambio a cada rato de base de datos y sería bueno pasarle un String por variable de entorno, un video muy útil! Gracias 😄

  • @_mateusdigital
    @_mateusdigital Рік тому +2

    Muy bueno hermano, yo gusto la clareza de los ejemplos :)

  • @compartelo007
    @compartelo007 6 років тому +18

    Genial, explicado con ejemplos de códigos y gráficos. De manera fácil, sencilla y clara. Da gusto aprender así.
    Mi enhorabuena y sobretodo gracias por tratar un tema tan poco tratado por otros canales pero de tanta importancia como son los Patrones de Diseño

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

    Excelente. El mejor tutorial que he visto de esta materia.

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

    La mejor explicación que encontr sobre el patron! Te agradezco muchisimo!

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

    Espectacular tu explicación. Al fin entendí.

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

    Ayer me queme la cabeza por dos horas buscando una explicación coherente.... y hoy, a mitad de tu video, ya entendia como funcionaba. Suscribo.
    Edit: es curioso, pero creó q es mas fácil de explicar, en parte, porque la clase Factory del ejemplo no respeta él segundo principio SOLID. La mayoría de los ejemplos ya lo implementaban pero se volvia complejo a la vista. Una buena decisión ahí.

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

    Buenisimo, es genial que cambies los nombres que se usan en ingles a español y contextualizar con ejemplos, eso hace que todo sea mucho mas facil de entender bro! asi que tome su buen like señor programador.

  • @yureplacido
    @yureplacido 5 років тому +7

    Parabéns, didática muito clara.
    A desvantagem que eu vejo no padrão Fábrica, é a necessidade de alterar o Shape quando surgirem novas implementações, ele não trabalha de maneira extensiva, ou seja, a classe está aberta para modificação e fechada para extensão, algo que vai de encontro ao princípio SOLID.

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

    Es de locos... Recién empiezo con esto de los patrones y tanto Singleton como Factory los implemente sin darme cuenta.
    Tenia un problema para un juego RPG por turno que estoy tratando de terminar y se me ocurrió hacer una interfaz para las Acciones (ataque, defensa, cargar y huir) y también hice una clase con un metodo estático, que es la que ejecuta la acción, acorde a lo que el usuario elija, recibiendo como parametro un int, los cuales fije constantes para el tipo de acción, en base a eso...
    Lo único, mi "factoria" la hice con switch.

  • @TheHarryCode
    @TheHarryCode 6 років тому +2

    Muchas gracias por el conocimiento que siempre nos compartes. Saludos desde Colombia.

  • @miguelangelramirez3820
    @miguelangelramirez3820 5 років тому +1

    Excelente explicación, yo estaba leyendo un libro llamado Head First Patters, y al complementario con tu video me quedo más claro este patrón, gracias

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

    Mito explicas excelente!! del ejemplo que nos regalas, en la clase ConexionFabrica reemplazaria los elseif por un switch para evitar el codigo espagueti, de resto todo perfecto

  • @coneledeleon
    @coneledeleon 5 років тому +1

    Recuerdo haber visto tu canal hace muchos años atrás (al menos 4 años), y en ese entonces no me pareció un buen canal. Creo que hoy debo reconocer que has mejorado muchísimo en cuanto a la generación de contenido. Muy buenos tutoriales, muy claros, gracias por el trabajo y el tiempo invertido bro!

  • @saulaxel
    @saulaxel 6 років тому +5

    Según un texto sobre la convención de nombres de java, que si no mal recuerdo era de la misma Oracle, cada palabra debe empezar con mayúscula y luego seguir con solo minúsculas (típico camel case). Esto es cierto incluso para aquellas palabras que son iniciales o siglas con algún significado. Por ejemplo:
    sedeDeLaONU -> incorrecto
    sedeDeLaOnu -> correcto
    El texto también indicaba que están consientes de que la propia API estándar de java rompe dicha convención en ocasiones, pero al parecer solo se mantienen esos nombres irregulares por compatibilidad hacia atrás.
    Por lo tanto, la forma correcta sería: ComexionMySql, MongoDb, IdPersona, etc...

  • @spiderick88
    @spiderick88 6 років тому

    Me parecen excelentes estos tutoriales, cada día aprendo más

  • @krashdata
    @krashdata 5 років тому +1

    Hermosa explicación!

  • @10danyohan
    @10danyohan 5 років тому

    Por fin encuentro vídeos fáciles de entender. Muchas gracias!!

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

    Se agradece profundamente tu dedicación para estos cursos.
    Me da la sensación que lo que se explica en este video según lo que he podido ver hoy es un un Simple Idiom Factory, ya que tu código sigue dependiendo de un hardcode en la fábrica por medio de EqualsIgnoreCase, lo que viola el principio SOLID de Open Close. En otros lados he visto que para evitar esto generan una clase abstracta cuyo método abstracto debe ser sobrescrito en las clases que hereden de esta en cuyo interior estan los métodos ya implementados de la Interfaz.

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

    Muy clara la explicación , recomendado

  • @sfabrizzio
    @sfabrizzio 6 років тому

    Felicitaciones Jaime Medina !!!

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

    Me encanto excelente explicación. Gracias

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

    Es correcto decir que la notacion @Qualifier en spring, funciona bajo el patrón de diseño fabrica?

  • @javi68yt2
    @javi68yt2 6 років тому +5

    gracias por los vídeos. están geniales 👍👏👏👏
    pero creo que en este ejemplo concreto se viola el Open-Close Principle ;-)

    • @yureplacido
      @yureplacido 5 років тому

      Verdade, fiz um comentário sobre isso.
      Apesar que, em caso de uma nova implementação, somente a Fábrica seria modificada, ou seja, tem a única responsabilidade de prover implementações.
      Mas realmente, não está extensível

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

      eso mismo estaba pensando

  • @JoseReyes-sl3gt
    @JoseReyes-sl3gt 6 років тому

    La verdad este tutorial esta de respeto le doy un 10

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

      está de respeto jajaj ta' buena la frase

  • @markcatthat254
    @markcatthat254 10 місяців тому

    Gracias. Lo programare.

  • @jonathanarangoa4281
    @jonathanarangoa4281 6 років тому +2

    Buenisimos sus videos men siga haciendo mas :D

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

    puedo usar una Clase abstracta en lugar de una interfaz?

  • @SergioRamirez-pu8vn
    @SergioRamirez-pu8vn 6 років тому

    Muchas gracias Jaime! Excelente como siempre

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

    Gracias. Muy útil

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

    Buen video, gracias por la explicación...

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

    se entendio todo, gracias.

  • @hazlotumismo1419
    @hazlotumismo1419 5 років тому

    Buen video, gracias por tu aporte, te la volaste con la manita arriba jajajaja

  • @williandavidlopezsanchez8331
    @williandavidlopezsanchez8331 5 років тому

    una pregunta, en el patrón Fabrica se pueden implementar otros métodos, no solo crear sino por ejemplo de búsqueda.

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

    A efectos prácticos Factory y Strategy realmente se diferencian en algo?

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

    yo estoy confundido, este es el mismo de factory method? que a su vez es distinto del de abstract factory?

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

    maginifico, solo un pequeño inciso, crees que estaria bien que en vez de crear todos esos condicionales en la funcion getConexion, quitarlos y poner un array asociativo y retornarlo directamente? o no.Muchas graicas por el aporte

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

    Mucho talento

  • @lewandydilone3957
    @lewandydilone3957 6 років тому

    Estuvo muy productivo!

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

    Hola amigo, este ejemplo se refiere al Patron de diseño Factory Method en Ingles?

  • @alejomor
    @alejomor 6 років тому

    Genial, gracias por los aportes!

  • @pedroarnoldomachadoduran546
    @pedroarnoldomachadoduran546 5 років тому

    Factory más que ser usado para que solo regrese una instancia, para lo que se usa es para construir objetos con una larga cantidad de parámetro en el constructor

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

    se me ocurre otro contexto donde puede ser útil este patron, por ejemplo para la programación de un juego, instanciar por medio de la fabrica ciertos enemigos que eventualmente cuando destruyas se borraran automaticamente

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

      Me parece un excelente ejemplo, crear enemigos según su tipo o nombre

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

    Excelente

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

    Muy bien la explicacion, pero creo que hubiera sido mejor que coincida el ejemplo que usaste en codigo (conexion a bases de datos) y el del diagrama (formas geometricas)

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

    haces clases particulares?

  • @CarlosHernández-i1u
    @CarlosHernández-i1u Рік тому

    ¿Buenas , que pasaría si las implementaciones no necesitan todos los métodos definidos en la Interfaz?

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

      Las implementaciones deben sobrescribir los métodos de la interfaz, así no los usen. Las interfaces obligan a las clases que las implementan a que usen esos métodos. De eso se trata una interfaz, de crear una estructura que sea de uso obligatorio para quien lo implemente

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

    UUUUUU, re excelente video.
    Tengo unas dudas xd.
    También se podría hacer static el método getConexion?

  • @FeeDeeX46
    @FeeDeeX46 5 років тому

    Muchas gracias! Me sirvió

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

    es buenisima la explicacion pero cuando dice factoria me viene un reggaeton a la cabeza jajaja

  • @martin_gallego
    @martin_gallego 6 років тому

    Excelente, muchas gracias

  • @mitrechosa
    @mitrechosa 5 років тому

    Excelente. Superclaro

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

    supeer!

  • @edustreamimg
    @edustreamimg 6 років тому

    Hola, donde podría conseguir información sobre la siguiente terminología: Caso de uso, cliente y dominio. Esto son conceptos de UML?

    • @MitoCode
      @MitoCode  6 років тому +1

      Si es UML, lee libros y artículos de Martin Fowler

  • @edustreamimg
    @edustreamimg 6 років тому

    El patrón Fábrica solo es aplicable en clases que no requieran parámetros en su constructor?. Por ejemplo si tengo un modelo Clientes y este requiere en su creación (constructor) que le pase un DNI no podria utilizarlo?

    • @MitoCode
      @MitoCode  6 років тому

      Pues para eso luego están los get y setters tras retornar la instancia

    • @edustreamimg
      @edustreamimg 6 років тому

      Esto ya se escapa de mis conocimientos. He visto algún video de MVC donde indican que siempre que se cree un modelo los campos clave deben pasarse en el constructor, no pudiendo dejar este metodo sin valores a menos que la tabla mapeada no cuente con claves. Los get/setters se usan para aquellos campos que no son clave. Más cosas, si usas el patrón fabrica no podrias hacer inyección de dependencias en un constructor? ...es decir el constuctor (con parámetros) como tal no tiene sentido si piensas utilizar tus clases dentro de una fábrica.

    • @MitoCode
      @MitoCode  6 років тому +1

      El constructor puede tener los parámetros o sin parámetros que desees, eso depende del programador... La fábrica solo devuelve una instancia, si deseas pasar parámetros en el constructor aparte de pasar el tipo para obtener una instancia podrias enviar luego valores como un atributo más (en un String separados x comas) y eso enviarlo al constructor trabajando con un algoritmo split, es más que todo ya lógica de programación

  • @ing.juandiaz2789
    @ing.juandiaz2789 4 роки тому

    Si todo muy bonito pero le falto explicar cuando usarlo

  • @garyjo3229
    @garyjo3229 5 років тому

    Muchas Gracias,

  • @microbio99
    @microbio99 6 років тому

    Muy bueno ahora entiendo jjaa .tenes mucha pedagojia

  • @eduardorabanal2803
    @eduardorabanal2803 6 років тому

    El método getconexion podría ser estático para no tener que instanciar la fábrica?

  • @redinjosemendez4536
    @redinjosemendez4536 6 років тому

    Gracias amigo

  • @minato16100
    @minato16100 6 років тому

    Esta bien explicado :D Gracias

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

    Genial vídeo! Muy bien explicado!
    Tengro una pregunta: Se podría decir que la Fábrica es una clase en donde se usan muchos IFs para devolver una instancia especifica según el parámetro dado? ¿Esto siempre se cumple?
    Y si se quieren añadir más opciones serían más IFs, ¿cierto?

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

      Hola, espero que estés bien.
      Por lo que vi en el video y entendí, sí es así como dices.

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

      @@javiervaleriano2920 Hola, espero que tu igual 😁
      Muchas gracias por responder, m ayuda a aclarar este concepto

    • @YeniCorrea
      @YeniCorrea 3 роки тому +2

      O puedes implementar un switch en vez de varios if.

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

      Entonces no es una clase; sino una estructura de datos. Y sí, la Fábrica es una estructura de datos encargada de crear clases que comparten comportamiento heredado de una interfaz

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

    Hola Mito sé que ya pasaron 2 años de que subiste el tutorial pero ¿No crees que es más conveniente hacer el método que retorna la instancia estático ? Así la fábrica no crea una instancia por cliente para retornar la instancia solicitada ....Espero me puedas contestar Excelente tutorial

  • @Daniel-cn5pd
    @Daniel-cn5pd 6 років тому

    ¿Que diferencia un Factory de una inyeccion de dependencias?. Gracias.

    • @MitoCode
      @MitoCode  6 років тому +1

      code.i-harness.com/es/q/882ae

    • @RexGanesAdventures
      @RexGanesAdventures 5 років тому

      El Contenedor de Spring antes era una Fabrica de Beans verdad? y con la aparicion de la inversion de control ya no necesitamos depender de el o eso entiendo xd

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

    psss ultimamente el sonar cube dice que no esta chido meter tantos if anidados, y me recomienda cambiarlo por un switch xD

  • @Ericlysify
    @Ericlysify 6 років тому

    muito bem explicado.

  •  6 років тому +1

    Ejemplo de polimorfismo también. :)

    • @yureplacido
      @yureplacido 5 років тому

      Na verdade, o piliformismo não necessita que se diga explicitamente qual o tipo do objeto, como existe com a implementações de vários IFs. Aí, não existe piliformismo.

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

    Yo hice la fabrica de otra manera para poder validar cuando metan motores de BD invalidos y asi no uso una clase poco util como ConexionVacia (que con todo respeto, es poco elegante usarla de esa forma):
    package com.fdxsoft.pattern;
    import com.fdxsoft.pattern.imp.ConexionMSSQL;
    import com.fdxsoft.pattern.imp.ConexionMySQL;
    import com.fdxsoft.pattern.imp.ConexionOracle;
    import com.fdxsoft.pattern.imp.ConexionPostgreSQL;
    public class ConexionFabrica {
    public IConexion getConexion(String motor) throws Exception {
    if(motor==null) {
    throw new Exception("Tiene que especificar un motor de conexion!");
    }
    switch(motor.toUpperCase()) {
    case "MYSQL":
    return new ConexionMySQL();
    case "ORACLE":
    return new ConexionOracle();
    case "POSGRESQL":
    return new ConexionPostgreSQL();
    case "MSSQL":
    return new ConexionMSSQL();
    default:
    throw new Exception("Motor de Base de Datos Invalido!");
    }
    }
    }
    Y mi app lo utilizaria de la siguiente manera:
    package com.fdxsoft.main;
    import com.fdxsoft.pattern.ConexionFabrica;
    import com.fdxsoft.pattern.IConexion;
    public class App {
    public static void main(String[] args) {
    //Instanciamos primero la fabrica de conexiones
    ConexionFabrica cf = new ConexionFabrica();

    try {
    //Ahora le vamos solicitando cada uno de los tipos de conexion disponibles
    IConexion cx1 = cf.getConexion("MSSQL");
    cx1.conectar();
    cx1.desconectar();
    IConexion cx2 = cf.getConexion("MYSQL");
    cx2.conectar();
    cx2.desconectar();
    IConexion cx3 = cf.getConexion("posgresql");
    cx3.conectar();
    cx3.desconectar();
    IConexion cx4 = cf.getConexion("oRACLE");
    cx4.conectar();
    cx4.desconectar();
    /*
    IConexion cx5 = cf.getConexion(null);
    cx5.conectar();
    cx5.desconectar();
    */
    IConexion cx6 = cf.getConexion("bd_no_soportada");
    cx6.conectar();
    cx6.desconectar();
    }catch(Exception e) {
    System.out.println("ERROR: " + e.getMessage());
    }
    }
    }

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

      Lo único que no me convence del todo es la forma que manejas el Try - Catch, literalmente eso es un code smell por donde lo mires. No hay forma de que, de no arreglarlo, no termine mal.
      Si yo fuera tú tendría algo como el patrón "Decorador", cosa que encapsule la obtención de las instancias en un único método y ese método lo tendría dentro de un Try - Catch.
      También, para mejorar el encapsulamiento haría un pequeño refactor a la Fábrica, cosa que quede tal que así:
      public static Conexion getConexion(String motorBaseDatos) {
      if (estaVacio(motorBaseDatos)) {
      throw new ConexionNoEncontradaExcepcion( );
      }
      return buscarConexion(motorBaseDatos);
      }
      private static Conexion buscarConexion(String motor) {
      return switch (motor.toUpperCase()) {
      case "MYSQL" -> new ConexionMySQL();
      case "ORACLE" -> new ConexionOracle();
      case "POSTGRE" -> new ConexionPostgre();
      case "SQL" -> new ConexionSQLServer();
      default -> throw new ConexionNoEncontradaExcepcion( );
      };
      }
      private static boolean estaVacio(String motor) {
      return Objects.isNull(motor);
      }

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

      @@jaredM_2710 esta probado y funciona correctamente, no hay forma de que truene, y te reto a que me digas como hacerlo tronar si segun tu crees que puede terminar mal

  • @maurya.5193
    @maurya.5193 4 роки тому

    +10

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

  • @ChristianAltamiranoAyala
    @ChristianAltamiranoAyala 6 років тому

    Mitocode alguna experiencia real en el que hayas usado ese patron

    • @MitoCode
      @MitoCode  6 років тому

      Hace unos 4 años vi que justamente cambiaban al motor de base de datos dependiendo el producto que la empresa daba soporte

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

    Me gustan las explicaciones, aunque tienes demasiados "else if" innecesarios y un "if" también innecesario.
    Además de que no cumples del todo con el encapsulamiento del Clean Code (dado que tienes las condiciones buleanas expuestas y no ocultas como debe ser)

  • @secundariab.2741
    @secundariab.2741 3 роки тому

    no le entendi ni madres :(

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

    Excelente, muchas gracias