Repaso
English

¿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

  1. Strategy (Opción correcta)
  2. Observer
  3. Adapter
  4. 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.

Términos clave

Practica esta pregunta en Repaso