Strategy Pattern en C#
El patrón Strategy (Estrategia) es un patrón de diseño que está clasificado como patrón de comportamiento.
La idea detrás de este patrón es la de determinar cómo se debe realizar el intercambio de mensajes entre diferentes objetos para resolver una tarea.
De esta forma, nuestro objeto cliente puede utilizar diferentes estrategias de forma dinámica.
Cada estrategia estaría definidas dentro de un algoritmo, actuando cada estrategia con un comportamiento diferente.
Por lo tanto, tendríamos un conjunto de algoritmos.
El quiz está en que intercambiando las estrategias, intercambiamos los algoritmos, dándonos mucha flexibilidad a la hora de abordar diferentes comportamientos.
Incluso algunos programadores utilizan este patrón como sustituto de herencia por su flexibilidad y profundidad.
Para poner un ejemplo práctico que ayude a entender cómo funciona el patrón, vamos a simular una clase Conductor que va a conducir diferentes vehículos.
Cada vehículo, por sus características, tendrá la posibilidad de acelerar y frenar de una forma diferente.
Por lo que nuestro conductor, lo único que tiene que hacer es preocuparse de acelerar y frenar, pudiendo cambiar de vehículo en cualquier momento.
A nuestro conductor, tampoco le importará cómo es «por dentro» cada vehículo.
Lo más importante para él es la posibilidad de cambiar de vehículo, y poder acelerar y frenar a su antojo.
Cada vehículo se comportará por dentro como se comporte. Para nosotros no es necesario conocer esos detalles ya que para nosotros, el comportamiento de cada vehículo será transparente.
Pondré otro ejemplo más sobre el posible uso de este patrón.
Imaginemos un juego de fútbol, por ejemplo el FIFA.
Nuestra clase PartidoDeFutbol enfrentará a dos equipos de 11 jugadores.
Cada jugador tendrá unas características propias de ese jugador: Ritmo, Tiro, Pase, Regate, Defensa, Físico.
Cuando un jugador se enfrenta a otro en un uno contra uno, u otra jugada como un tiro libre, saque de esquina, etc., lo que nos interesará conocer es la información o características del jugador.
Podremos cambiar dinámicamente de jugador, y obtendremos otros datos.
Trataremos todos los objetos de la misma manera, ya que el comportamiento de todos ellos es homogéneo.
Como vemos, la aplicación y uso de este patrón puede ser extendido en muchos proyectos.
En este caso, en lugar de escribir el código completo del patrón en C# en el blog, te invito a visitar mi repo de Github donde encontrarás el código completo allí.
Podrás acceder al código de este patrón en este enlace.
Happy Coding!