Patrón Strategy en Diseño de Software con Python
Clase 15 de 27 • Curso de Patrones de Diseño y SOLID en Python
Contenido del curso
- 2

Principio de Responsabilidad Única en Desarrollo de Software
05:59 - 3

Procesador de Pagos con Principios SOLID y Stripe
11:14 - 4

Aplicación del Principio de Responsabilidad Única en Procesador de Pagos
25:30 - 5

Principio Abierto-Cerrado en Desarrollo de Software
02:39 - 6

Implementación del Principio Abierto-Cerrado en Procesadores de Pago y Notificadores
14:46 - 7

Principio de Sustitución de Liskov en Desarrollo de Software
03:18 - 8

Aplicación del Principio de Sustitución de Liskov en Python
06:44 - 9

Principio de Segregación de Interfaces en Software
02:33 - 10

Implementación del Principio de Segregación de Interfaces en Procesadores de Pago
09:06 - 11

Principio de Inversión de Dependencias en Software
04:23 - 12

Aplicación del Principio de Inversión de Dependencias en Python
05:56
- 14

Introducción a los Patrones de Diseño de Software
03:54 - 15

Patrón Strategy en Diseño de Software con Python
01:55 - 16

Implementación del Strategy Pattern en Procesador de Pagos en Python
10:58 - 17

Patrón Factory Pattern en Python: Creación de Objetos Dinámicos
03:05 - 18

Patrón Factory en Procesadores de Pago en Python
11:06 - 19

Patrón Decorador: Añadir Responsabilidades Dinámicas a Objetos
03:06 - 20

Aplicación del Patrón Decorador en Servicios de Pago
12:57 - 21

Patrón de Diseño Builder: Construcción de Objetos Complejos
01:28 - 22

Builder Pattern para Servicio de Pagos en Python
18:55 - 23

Patrón Observer: Gestión de Eventos y Notificaciones Automáticas
01:48 - 24

Patrón Observer en Sistemas de Pago: Implementación y Notificaciones
11:12 - 25

Patrón Chain of Responsibility en Validación de Pagos
02:04 - 26

Implementación del patrón Chain of Responsibility en validaciones de pago
16:27 - 27

Principios SOLID y Patrones de Diseño en Procesadores de Pago
03:19
El patrón de diseño Strategy es una herramienta clave en el desarrollo de software, permitiendo cambiar dinámicamente entre diferentes algoritmos o estrategias para resolver un problema, sin alterar la estructura del programa. Este patrón es ideal para situaciones donde múltiples soluciones son viables, adaptándose al contexto en tiempo de ejecución, como lo ejemplifica el procesamiento de pagos.
¿Qué es el patrón Strategy?
Este patrón de comportamiento facilita el intercambio de algoritmos que resuelven el mismo problema de distintas formas. Es útil en situaciones donde diferentes estrategias pueden ser aplicadas según el contexto, permitiendo que el programa sea flexible y adaptable sin modificar su estructura central.
¿Cómo permite el patrón modificar estrategias en tiempo de ejecución?
El patrón Strategy permite la modificación de la estrategia mediante métodos que cambian la clase o el algoritmo que se está utilizando. En el ejemplo presentado, se utiliza el método SetProcessor, que permite al servicio de pagos intercambiar entre diferentes procesadores de pago durante la ejecución del programa.
¿Cómo se implementa en el código?
- Se define una interfaz o protocolo que las diferentes estrategias deben implementar.
- La clase de alto nivel, en este caso
PaymentService, no depende de las implementaciones concretas, sino de la interfaz. - Las estrategias concretas implementan esta interfaz, lo que permite la inyección de la estrategia adecuada según el contexto.
- Un método como
SetProcessorfacilita la selección y aplicación de la estrategia durante la ejecución.
¿Cómo seleccionar la mejor estrategia?
La elección de la estrategia adecuada puede hacerse a través de una función externa o clase que analice las condiciones del problema y determine cuál es la mejor solución. Esta selección no tiene que estar dentro de la clase de alto nivel, permitiendo una mayor modularidad y escalabilidad en el sistema.
¿Cuáles son los beneficios del patrón Strategy?
- Flexibilidad para intercambiar algoritmos sin cambiar la lógica central.
- Desacopla las clases de alto nivel de las implementaciones específicas.
- Mejora la mantenibilidad y escalabilidad del código.