Strategy | Organiza tus algoritmos con este patrón de diseño

แชร์
ฝัง
  • เผยแพร่เมื่อ 1 ส.ค. 2024
  • 👉 Conoce más de mi CURSO PRÁCTICO DE PATRONES DE DISEÑO: manuelzapata.co/curso-pdd
    En este video te explico los aspectos básicos, analogías y ejemplo de código del Patrón de Diseño Strategy o Estrategia.
    MIS CURSOS
    📐 Arquitectura de Software: manuelzapata.co/ars
    🔌 Patrones de Diseño: manuelzapata.co/curso-pdd
    📦 Programación Profesional con Objetos (Gratis): manuelzapata.co/objetos
    🌲 Principios de Diseño SOLID (Gratis): manuelzapata.co/mcp
    🌎 Mi sitio web: manuelzapata.co
    🎦 Suscríbete al canal: manuelzapata.co/suscribete
    📩 Mi lista de correo: manuelzapata.co/lista
    Secciones del video
    00:00 - Introducción
    00:06 - Analogía de Strategy en la vida real
    02:06 - Conceptos básicos de Strategy
    03:28 - Estructura de Strategy
    05:04 - Ejemplo de una estructura de Strategy
    07:38 - Cuándo usar Strategy
    09:23 - Ventajas y Desventajas de Strategy
    15:23 - Ejemplo de Strategy en Java
    27:58 - Cierre
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 19

  • @ManuelZapata
    @ManuelZapata  ปีที่แล้ว

    👉 Conoce más del CURSO PRÁCTICO DE PATRONES DE DISEÑO:
    manuelzapata.co/curso-pdd

  • @oh-vito
    @oh-vito ปีที่แล้ว +1

    Excelente ejemplo para entender el patrón strategy.

  • @ElBarbaroDev
    @ElBarbaroDev ปีที่แล้ว +2

    Excelente aporte. Gracias.

  • @manuelzapatacastillo561
    @manuelzapatacastillo561 ปีที่แล้ว

    Buenas tardes Hijo, interesante contenido

  • @megadeath15
    @megadeath15 ปีที่แล้ว +1

    Muy buenos videos

  • @elberthagreda4467
    @elberthagreda4467 ปีที่แล้ว

    Buen video, recomendarias el uso de maquinas de estado para la implementación de este patron? Saludos!!

    • @ManuelZapata
      @ManuelZapata  ปีที่แล้ว

      Si necesito estados, probablemente me iría por un patrón de State, y no Strategy.

  • @sparrowfunction8915
    @sparrowfunction8915 ปีที่แล้ว

    Buenas Manuel, antes de nada agradecerte toda la información que compartes en tú canal.
    Quería preguntarte, si podría realizarse esa inicialización de propiedades en el constructor en vez del método adicional init.
    ¿Lo has puesto en ese método para "forzar" la implementación en el caso que sea necesaria?

  • @user-nl4tn3zq8i
    @user-nl4tn3zq8i ปีที่แล้ว

    Al momento de crear las estrategias y los contextos; Se puede usar el patron Factory?

  • @luisespinoza9093
    @luisespinoza9093 3 หลายเดือนก่อน +1

    Tengo una duda y en un escenario donde dependiendo ciertos factores tienes que usar el algoritmo de encriptación AES y CEASAR, se usaría de todas maneras una condicional en la clase StrategyClient? al final se caeria en lo mismo que se trata de evitar no?

    • @luisvalero6665
      @luisvalero6665 3 หลายเดือนก่อน

      tengo la misma duda

  • @arosorio
    @arosorio ปีที่แล้ว

    Hola Manuel, tengo un caso en una empresa de logistica y si bien sé que esto no es un consultaria me gustaría tener tu punto de vista a problematicas reales de negocio. Esta empresa tiene n clientes y cada cliente usualmente envia sus ordenes de entrega en archivos (txt, xlsx o XML), en esencia cada cliente envia mas o menos la información requerida para crear una orden estandar, sin embargo como ya supondras, por cada cliente cambia el formato del archivo, la estructura de los datos y lo mas importante los codigos usados, por ejemplo un cliente puede enviar nombres de ciudades y otro enviar sus propios codigos de ciudades en cada caso los debo convertir a la codificación usada por la empresa logistica. Deseo implementar el uso del patron estrategia, ya he implementado las estrategias concretas e incluso cada una de ellas puede usar otras estrategias por ejemplo para leer el contenido de un archivo y devolverlo en una estructura tabular (para archivos txt o xlsx) o un Documento (XML). Uso SpringBoot y java 8+. Lo que siempre he querido mejorar ha sido: 1) Hacer uso de lo que has explicado del Contexto, En mi caso tengo un servicio que periodicamente recorre una estructura de directorios, cada directorio me dice a que cliente pertenece el archivo y de acuerdo con eso pues llamo un metodo de la estrategia concreta esto es un swicht(codigoCliente) .... case CLIENTE_TUBOS: servicioClienteTubo.procesar(rutaArchivo)... 2) Esto es un programa que lleva años funcionando pero me veo tentado a explorar el uso de EIP (www.enterpriseintegrationpatterns.com/), me han recomendado que pase todo eso a unas ETL como SQL Server Integration Services que aunque se usarlo, lo cierto es que con Java puedo reutilizar mucho codigo y me es mas facil gestionar errores y reiniciar las tareas desde cierto punto. 3) Tambien me ha tentado la idea de poder ir generando jars con ls implementaciones de las estrategias para cada cliente, por la aplicación de administración configurar a cada cliente la implementacion concreta que debe usar (Como cuando en herramientas como DBeaver o similares le indicamos la libreria que usaremos para la conexón a ls base de datos). Sucede que cada cliente puede tener implementaciones concrertas no solo para el procesamiento de diferntes tipos de ordenes (entradas de mercancia a bodega, despachos, traslados, destruccion de mercancia vencida,...) pero tambien tienen implementaciones diferentes para liquidar los servicios de almacenamiento o de transportes (entregas y recogidas), la idea es que la entrada o salida de un cliente requiera la menor modificacion del programa 5) En mi caso uso una BD SQL y un reto que tengo es como cumplo los requerimeintos especiales de información de cada cliente, esto es algunos clientes pueden requerir datos muy particulares de sus entregas por ejemplo hay un cliente que nos pidio que cada producto en una entrega viniese con una relación de unos codigos documentos sanitarios que da el gobierno o que cada electrodomestico venga con un serial o un dato de su importación o un dato tecnico por ejemplo un numero de 1 a 5 que sea la calidad de esa instancia de producto. Estos son datos que solo usará una estrategia concreta pero si lo meto en las tablas estandares de alguna manera contamino mi modelo estandar con cosas particulares de cada cliente, si creo una tabla tipo nombreatributo-valor asociada a las entidades que tengan este requerimiento me funciona muy bien pero no me gusta dos cosas a) el valor lo almaceno como texto y me toca controlar que alli se meta un valor del tipo valido y b) para el tema de algunos reportes en linea que me piden, me toca hacer una operacion PIVOT de estos atributos, lo cual ademas de crearme una dependecia con el motor de BD a veces esto puede generarme problema de desempeños... la opción NoSQL entiendo sería ideal en este caso... pero la empresa no se quiere meter con este tipo de base de datos. Tengo mas preguntas... pero no quiero pasar la raya entre plantear un tema interesante para aprender y el descaro.

  • @soran2290
    @soran2290 ปีที่แล้ว +1

    Es como el patrón repository?

    • @ManuelZapata
      @ManuelZapata  ปีที่แล้ว

      Realmente no. Tienen una estructura de clases similar, pero la intención de cada patrón, así como los métodos que se definen en cada uno, son muy diferentes.

  • @wilfredodice7972
    @wilfredodice7972 ปีที่แล้ว

    Manuel saludos excelente video. Una duda ¿realmente es necesario tener un constructor en la clase StrategyContext para recibir la clase concreta? Si queremos asegurarnos de que se nos llame correctamente, bastaría con agregar un assert en el método setStrategy. Ademas si lo hacemos a través del constructor, estaríamos estableciendo una relación de composición permanente, lo cual no creo que sea deseado. En cambio, al utilizar el método setStrategy, tendríamos una relación de asociación de uso, que sería lo ideal ya que es dinámica y momentánea. ¿Estoy equivocado?

    • @ManuelZapata
      @ManuelZapata  ปีที่แล้ว +1

      Aquí es donde viene el poder de ajustar el patrón a tus necesidades. Si consideras que es mejor pasar la dependencia con un método set, perfecto!