¿Qué patrón es este?
class Checkout:
def __init__(self, shipping_calc):
self.shipping_calc = shipping_calc
def total(self, cart):
return cart.subtotal + self.shipping_calc(cart)
Checkout(express_shipping).total(cart)
Checkout(free_shipping).total(cart)Opciones
- Strategy (Opción correcta)
- Observer
- Adapter
- Template Method
Respuesta
Strategy
Por qué
Strategy pone algoritmos intercambiables (aquí: formas de calcular el envío) detrás de la misma interface, y permite elegir uno en ejecución.
Checkout no sabe ni le importa qué regla de envío recibió; simplemente la llama. Añadir una regla nueva no requiere cambios en Checkout.
En Python una strategy puede ser simplemente una función.
Recuerda
Strategy = cambiar el algoritmo sin cambiar el código que lo usa.