Tras los patrones Composite y Observer, en esta ocasión veremos el patrón Strategy. Este patrón está orientado a establecer unas reglas de comportamiento en las clases u objetos que lo implementen. Por tanto, en la JDK será más habitual encontrarnos con interfaces que lo plantean como es el caso de Comparable.
Patrón Strategy
Este patrón facilita la implementación de distintas estrategias o comportamientos específicos en clases hijas a través de una clase común. Así, en tiempo de ejecución y en función de algún parámetro como el tipo de instancia, se ejecutará la estrategia concreta para esa situación.
Se recomendará usar este patrón cuando en un mismo programa debamos proporcionar distintas alternativas de comportamiento, permitiendo a través de clases independientes, encapsular las distintas estrategias.
Los distintos componentes de este patrón son:
- Interfaz Strategy: será aquella interfaz que define el nombre del método o métodos que conformarán la estrategia.
- Clases Strategy concretas: todas aquellas clases que implementen la interfaz Strategy dando forma al algoritmo.
- Contexto: elemento donde se desarrollará la estrategia.
El diagrama UML de la implementación de este patrón será:
Como podemos observar, la interfaz iArea será la estrategia genérica. En este caso, además, se ha añadido una clase abstracta AbstractArea que implementará dicha interfaz y definirá algunas propiedades que serán comunes o necesarias en las implementaciones concretas (en este caso, el nombre de la figura).
- iArea: Interfaz en la que definimos un método que nos ayudará a calcular el área de cualquier cuerpo geométrico.
- AbstractArea: Clase abstracta que implementará la interfaz IArea y donde definimos un constructor y alguna propiedad básica o común al resto de estrategias.
A continuación desarrollaremos 3 clases para implementar la forma de calcular el área de un polígono regular, un círculo y un triángulo. Estas serán las estrategias existentes en nuestra aplicación de ejemplo.
- AreaCircular: Estrategia que define que el cálculo del área de un circulo se lleva a cabo multiplicando el valor del radio al cuadrado por el número PI.
- AreaTriangulo: Estrategia que define que el cálculo del área de un triángulo se lleva a cabo multiplicando el valor de la base por la altura dividiéndolo entre 2.
- AreaPoligonoRegular: Estrategia que define que el cálculo del área de un polígono regular de n lados conocido el radio de la circunferencia que lo contiene se lleva a cabo multiplicando el número de lados, por el radio al cuadrado, por el seno de 2PI dividido entre n y todo ello dividido entre 2.
Para completar el ejemplo, se han creado un par de excepciones específicas de forma que si se pasa un valor incorrecto al constructor de un objeto nuestra aplicación nos comunique cual es el error:
Finalmente, desarrollamos la clase CuerpoGeometrico donde podremos ver las distintas estrategias en acción:
Finalmente, incluimos la clase con el método main y las pruebas del patrón:
Como siempre, el proyecto con el código está disponible aquí.
Si te ha gustado este artículo de nuestro profesor Juan José Hernández y te interesa seguir fomándote en programación Java, puedes solicitarnos información de nuestro Curso de JAVA y nuestro Curso de Java EE.
SEAS es el centro de formación online del Grupo San Valero, especializado en el ámbito técnico, industrial y de empresa. Visita www.seas.es para consultar nuestra oferta formativa de cursos y másteres. Formación profesional para el empleo de calidad y accesible para todos.
Stanley
25 agosto, 2014 at 1:19 amMuy buen tutorial amigo, me sirvio de mucho.
kcobuntu
23 noviembre, 2014 at 4:16 pmGracias por compartir
Je
6 abril, 2015 at 10:32 pmGracias! muy bien explicado.
Jose
6 diciembre, 2015 at 10:42 amMuy buen tutorial, claro y sencillo Gracias, pero tengo una duda la interface ‘iArea’ se podría eliminar dejando la clase abstracta como la strategy, con el método para calcular el área como abstract, el efecto sería el mismo ¿no?