El patrón estrategia es un patrón de diseño de comportamiento que te permite definir una familia de algoritmos, colocar cada uno de ellos en una clase separada y hacer que sus objetos sean intercambiables.

¿Qué problema resuelve el patrón estrategia?

El patrón Estrategia sugiere que tomes una clase que haga algo específico de muchas maneras diferentes, por ejemplo en un app de rutas (en coche por carretera, caminando, en bicicleta, transportes públicos, etc…), y extraigas todos estos algoritmos en clases separadas que se llaman estrategias.

La clase original se llama contexto, y debe tener un campo para almacenar una referencia a una de las estrategias. El contexto no ejecuta el trabajo por sí solo, lo delega a un objeto de estrategia vinculado. No es responsable de seleccionar un algoritmo para el trabajo. El cliente pasa la estrategia al contexto.

La idea es que el contexto se independice de estrategias concretas. Esto significa que puedes agregar nuevos algoritmos o modificar los algoritmos existentes sin cambiar el código del contexto.

¿Cuándo usar el patrón estrategia?

Deberías utilizar el patrón estrategia cuando quieras utilizar diferentes variables de un algoritmo dentro de un objeto y poder cambiar de un algoritmo a otro durante el tiempo de ejecución. Este patrón te permite alterar indirectamente el comportamiento del objeto en tiempo de ejecución al asociarlo con diferentes subobjetos.

También podrías usar estrategia cuando tengas muchas clases similares que solamente difieren en la forma en que ejecutan algún comportamiento. Con el patrón estrategia puedes extraer el comportamiento variable en una jerarquía de clases separada y combinar las clases originales en una sola.

Otra de las utilidades de este patrón es la posibilidad de aislar la lógica empresarial de una clase de los detalles de implementación de los algoritmos que pueden no ser tan importantes en el contexto de esa lógica.  Puedes aislar el código, los datos internos y las dependencias de varios algoritmos del resto del código.

Por último deberías usar el patrón cuando tu clase tenga una declaración condicional masiva que cambie entre diferentes variantes del mismo algoritmo. Este patrón te permite eliminar dicho condicional al extraer todos los algoritmos en clases separadas.

Pros y contras del patrón estrategia

Los siguientes son algunos de los “pros y cons” de este patrón.

Pros

Contras

  • Puedes intercambiar algoritmos utilizados dentro de un objeto en tiempo de ejecución

  • Puedes aislar los detalles de implementación de un algoritmo del código que lo usa

  • Puedes reemplazar la herencia con la composición

  • Principio abierto/cerrado. Puedes introducir nuevas estrategias sin tener que cambiar el contexto. 

  • Si solo tienes un par de algoritmos y rara vez cambian, nuevas clases e interfaces, puede ser exagerado

  • Los clientes deben ser conscientes de las diferencias entre las estrategias para poder seleccionar una

  • Muchos lenguajes de programación modernos tienen soporte de tipo funcional que podrías usar sin inflar tu código con clases e interfaces adicionales. 

“Show me the code”

El patrón Estrategia es relativamente poco complejo y muy popular en PHP. Se utiliza especialmente cuando es necesario cambiar los algoritmos en tiempo de ejecución. Vale la pena saber, que las funciones anónimas, introducidas en 2009, son el gran competidor de este patrón.

Por tanto, si quieres tener una idea de cómo se ve el código del patrón estrategia, puedes ver el ejemplo del mundo real de refactoring.guru. En el ejemplo verás como se utiliza el patrón estrategia para representar métodos de pago en una aplicación de e-commerce.

En ella, cada método de pago puede mostrar un formulario de pago para recopilar los detalles de pago adecuados de un usuario y enviarlos a la empresa de procesamiento de pagos.

¿Utilizas el patrón Estrategia en tus proyectos? ¿Qué tal la experiencia? ¡Coméntalo abajo!

Fuente:

Compartir es construir