miércoles, 3 de noviembre de 2010

Patrones de diseño: Strategy

Este patrón permite que el algoritmo a ejecutarse se seleccione en tiempo de ejecución. Este algoritmo proporciona una familia de algoritmos, encapsula cada uno dentro de un objeto y los hace intercambiables. Esto permite que el algoritmo a ejecutarse varíe en función del cliente que lo use.

¿Qué ventajas proporciona el uso de éste patrón?

En primer lugar, es mucho más fácil comprender cada uno de los distintos comportamientos si su implementación está encapsulada en distintas clases, y no entrelazada en un único método. Esto permite de forma simple añadir nuevos comportamientos, y elminar o modificar los existentes.

En los casos en que existan varios objetos cuyo comportamiento sea parcticamente el mismo, esto se puede reducir a una única clase que haga uso de distintas estrategias. Esto reduce el uso de subclases y, por tanto, el acoplamiento entre ellas

¿Cómo se implementa este patrón?

Las posibles estrategias se ejecutan dentro de un objeto de contexto que se encarga de recuperar la estrategia apropiada para el cliente. Cada una de las estrategias implementa una interfaz que define la firma del método de la estrategia.

Vamo a ver un ejemplo que permita aclarar esto. Por ejemplo, en un banco existen distintos tipos de cuentas, para las cuáles se siguen distintos algoritmos a la hora de calcular sus rendimientos anuales. Un objeto encargado de calcular los rendimientos de las cuentas (en este ejemplo, éste sería el objeto de contexto) podría utilizar distintas estrategias para calcular el rendimiento de cada tipo de cuenta.

El siguiente diagrama representa el ejemplo anterior:

Si ahora se quisiese incluir un nuevo tipo de cuenta, por ejemplo una Cuenta Vivienda, simplemente habría que crear una nueva estrategia que implemente el algoritmo de cálculo de rendimiento y hacer que el objeto CalculadoraRendimiento relacione este tipo de cuenta con la estrategia adecuada.

De esta manera, se ha desacoplado el cálculo del rendimiento específico de cada tipo de cuenta, separando cada uno en una clase haciéndolos más claros de entender y más fácilmente modificables.

Referencias:
Strategy Pattern en Wikipedia
The Strategy Design Pattern
Patrón Strategy
Otros patrones de diseño

No hay comentarios:

Publicar un comentario