Strategy: Intercambio de Algoritmos
Define una familia de algoritmos, encapsula cada uno en su propia clase y hazlos intercambiables en tiempo de ejecución — elimina los condicionales seleccionando el comportamiento mediante composición.
Por qué importa
Un checkout que maneja PayPal, tarjeta y transferencia bancaria con un largo bloque if/elif viola el Principio Abierto-Cerrado: añadir crypto requiere editar la clase checkout. Strategy encapsula cada algoritmo en su propia clase y lo inyecta en el sitio de llamada. El checkout delega a cualquier estrategia que reciba — añadir crypto significa escribir una nueva clase y conectarla, cero ediciones al código existente.
Strategy vs. State
Strategy y State se ven estructuralmente idénticos — ambos inyectan un objeto polimórfico al que el contexto delega. La diferencia es la intención: una Strategy es seleccionada por el cliente y normalmente no cambia después de la construcción; un State se transiciona internamente mientras el objeto avanza por su ciclo de vida. En caso de duda: si el algoritmo se elige externamente, es una Strategy; si el objeto cambia su propio comportamiento con el tiempo, es un State.
💡Conclusión clave
Cada if/elif en un campo "tipo" que selecciona un algoritmo es un Strategy esperando ser extraído — encapsula cada variante, inyéctala, y las nuevas variantes añaden código en lugar de modificarlo.
🔧 Algunos ejercicios pueden tener errores. Si algo parece incorrecto, usa el botón Feedback (abajo a la derecha) para reportarlo — nos ayuda a corregirlo rápido.
Pista: Cada if/elif en un campo 'tipo' que selecciona un algoritmo es un patrón Strategy esperando ser extraído.
✗ Tu versión