Skip to main content

Inicia sesión en CleanKata

Sigue tu progreso, gana XP y desbloquea todas las lecciones.

Al iniciar sesión aceptas nuestros Términos de uso y Política de privacidad.

Patrones de Diseño80 XP8 min

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