No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de qui茅n quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscr铆bete

Termina en:

15 D铆as
14 Hrs
33 Min
9 Seg

Patr贸n Strategy en Python

14/27
Recursos

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 SetProcessor facilita 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.

Aportes 1

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

El \*\*Patr贸n Strategy\*\* es un patr贸n de dise帽o de comportamiento que permite definir una familia de algoritmos, encapsular cada uno de ellos y hacerlos intercambiables. Este patr贸n facilita que los algoritmos puedan variar independientemente del cliente que los utiliza, promoviendo la extensibilidad y reducci贸n de la complejidad. \### Conceptos Clave del Patr贸n Strategy 1\. \*\*Estrategia (Strategy)\*\*: Es una interfaz o clase abstracta que define un comportamiento com煤n para un conjunto de algoritmos o estrategias. 2\. \*\*Estrategias Concretas (Concrete Strategies)\*\*: Son las clases que implementan el comportamiento de una estrategia espec铆fica. 3\. \*\*Contexto (Context)\*\*: Es la clase que utiliza una estrategia para llevar a cabo su operaci贸n. El contexto contiene una referencia a una estrategia y permite cambiarla din谩micamente. \### Ejemplo en Python: Estrategia de Pago Imaginemos que tenemos una tienda en l铆nea que acepta diferentes m茅todos de pago. Usaremos el patr贸n Strategy para poder intercambiar f谩cilmente entre m茅todos de pago, como tarjeta de cr茅dito, PayPal y criptomonedas. \#### Paso 1: Definir la Interfaz de Estrategia Definimos una interfaz com煤n que todos los m茅todos de pago deben implementar. Esta interfaz tiene un m茅todo `pay` que cada estrategia concreta debe sobreescribir. ```python from abc import ABC, abstractmethod class PaymentStrategy(ABC): @abstractmethod def pay(self, amount): pass ``` \#### Paso 2: Crear las Estrategias Concretas Implementamos diferentes m茅todos de pago como clases concretas que heredan de `PaymentStrategy` y proporcionan una implementaci贸n del m茅todo `pay`. ```python class CreditCardPayment(PaymentStrategy): def pay(self, amount): print(f"Paying {amount} using Credit Card.") class PayPalPayment(PaymentStrategy): def pay(self, amount): print(f"Paying {amount} using PayPal.") class CryptoPayment(PaymentStrategy): def pay(self, amount): print(f"Paying {amount} using Cryptocurrency.") ``` Cada clase concreta implementa `pay` de una manera diferente, proporcionando su propio comportamiento espec铆fico. \#### Paso 3: Crear la Clase Contexto La clase `ShoppingCart` act煤a como el contexto en el cual se usa el patr贸n Strategy. Esta clase permite que el usuario seleccione una estrategia de pago y luego la ejecuta al confirmar el pago. ```python class ShoppingCart: def \_\_init\_\_(self): self.total\_amount = 0 self.payment\_strategy = None def add\_item(self, price): self.total\_amount += price def set\_payment\_strategy(self, strategy: PaymentStrategy): self.payment\_strategy = strategy def checkout(self): if not self.payment\_strategy: raise Exception("Payment strategy not set!") self.payment\_strategy.pay(self.total\_amount) ``` \- `add\_item` permite agregar el precio de los art铆culos al carrito. \- `set\_payment\_strategy` establece la estrategia de pago deseada (tarjeta, PayPal, etc.). \- `checkout` realiza el pago utilizando la estrategia de pago configurada. \#### Paso 4: Usar el Patr贸n Strategy Con esta estructura, podemos cambiar la estrategia de pago en cualquier momento, sin modificar la clase `ShoppingCart`. ```python \# Crear un carrito de compras cart = ShoppingCart() cart.add\_item(50) cart.add\_item(100) \# Usar la estrategia de pago con tarjeta de cr茅dito cart.set\_payment\_strategy(CreditCardPayment()) cart.checkout() \# Output: Paying 150 using Credit Card. \# Cambiar la estrategia de pago a PayPal cart.set\_payment\_strategy(PayPalPayment()) cart.checkout() \# Output: Paying 150 using PayPal. \# Cambiar la estrategia de pago a Criptomoneda cart.set\_payment\_strategy(CryptoPayment()) cart.checkout() \# Output: Paying 150 using Cryptocurrency. ``` \### Ventajas del Patr贸n Strategy 1\. \*\*Extensibilidad\*\*: Es f谩cil a帽adir nuevas estrategias sin modificar las clases existentes, simplemente creando nuevas clases de estrategia. 2\. \*\*Cambio Din谩mico de Comportamiento\*\*: Podemos cambiar el comportamiento del contexto en tiempo de ejecuci贸n sin modificar su c贸digo. 3\. \*\*Separaci贸n de Responsabilidades\*\*: Cada algoritmo se encapsula en su propia clase, manteniendo un c贸digo m谩s limpio y organizado. \### Desventajas del Patr贸n Strategy 1\. \*\*Aumento del N煤mero de Clases\*\*: Cada estrategia es una nueva clase, lo que puede aumentar la complejidad en proyectos grandes. 2\. \*\*Complejidad\*\*: Puede ser excesivo para casos simples, especialmente si los algoritmos son peque帽os y similares. \### Conclusi贸n El patr贸n Strategy en Python es 煤til cuando queremos implementar m煤ltiples algoritmos o comportamientos intercambiables para una tarea espec铆fica. Nos permite cumplir con el Principio Abierto/Cerrado (OCP) al hacer el sistema extensible y modular, mejorando la mantenibilidad y escalabilidad de nuestras aplicaciones.