viernes, 22 de abril de 2016

Patron Estrategia

Patrón Estrategia

Definición: 

•Es un patrón de diseño de comportamiento, que encapsula algoritmos en
clases,permitiendo que sean reutilizados e intercambiables. En base a un parámetro, que
puede se cualquier objeto, permite a una aplicación decidir en tiempo de ejecución el
algoritmo que debe ejecutar.
•Busca desacoplar bifurcaciones inmensas con algoritmos dificultosos según el cambio
elegido.

¿Cuando debo usarlo?

•Un programa tiene que proporcionar múltiples variantes de un algoritmo o comportamiento.
•Es posible encapsular las variantes de comportamiento en clases separadas que proporcionan un modo consistente de acceder a los comportamientos.
•Permite cambiar o agregar algoritmos, independientemente de la clase que lo utiliza.


Estructura


Ejemplo

Imaginemos una biblioteca de un instituto educativo que presta libros a los alumnos y profesores. Los alumnos pueden asociarse a la biblioteca pagando una mensualidad. Con lo cual un libro puede ser prestado a Alumnos, Socios y Profesores.
Por decisión de la administración, a los socios se les prestará el libro más nuevo, luego aquel que se encuentre en buen estado y, por último, aquel que estuviese en estado regular.
En cambio, si un Alumno pide un libro, ocurre todo lo contrario. Por último, a los profesores intentarán otorgargarles libros buenos, luego los recién comprados y, por último, los regulares. Este caso es ideal para el patrón Strategy, ya que dependiendo de un parámetro (el tipo de persona a la que se le presta el libro) puede realizar una búsqueda con distintos algoritmos

Comenzaremos por la clase persona: 

La clase Profesor:

La clase Estudiante:

La clase Socio:

Nuestra Interface que encapsula las estrategias:

Y las estrategias concretas: 

Primera: 

Segunda: 

Tercera: 

Necesitaremos una Factoría que cree los diferentes objetos de las estregias según sea la intancia:

y por ultimo nuestro Main:

Consecuencias: 

•Permite que los comportamientos de los Clientes sean determinados dinámicamente sobre un objeto base.
•Simplifica los Clientes: les reduce responsabilidad para seleccionar comportamientos o implementaciones de comportamientos alternativos. Esto simplifica el código de los objetos Cliente eliminando las expresiones if y switch.
•En algunos casos, esto puede incrementar también la velocidad de los objetos Cliente porque ellos no necesitan perder tiempo seleccionado un comportamiento.

0 comentarios:

Publicar un comentario