Patron Estrategia - Version Final

8
Introducción La mayor parte de los problemas que nos podemos encontrar al usar patrones de diseño vienen de no ser capaces de reconocer en qué contextos hay que aplicarlos. Caemos en la trampa de, al intentar escribir código mejor, generar deuda técnica, ya que el patrón aplicado no resolvía el problema que teníamos en realidad. Es por eso que la pregunta más importante que tenemos que responder cuando empezamos a estudiar un patrón de diseño es: ¿para qué sirve? El patrón Estrategia tiene sentido cuando nos encontramos en un escenario en el que para conseguir un objetivo, tenemos diferentes formas de afrontarlo.

description

aplicacion del patron strategy

Transcript of Patron Estrategia - Version Final

Page 1: Patron Estrategia - Version Final

Introducción

La mayor parte de los problemas que nos podemos encontrar al usar patrones

de diseño vienen de no ser capaces de reconocer en qué contextos hay que

aplicarlos. Caemos en la trampa de, al intentar escribir código mejor, generar

deuda técnica, ya que el patrón aplicado no resolvía el problema que teníamos

en realidad.

Es por eso que la pregunta más importante que tenemos que responder cuando

empezamos a estudiar un patrón de diseño es: ¿para qué sirve? El patrón

Estrategia tiene sentido cuando nos encontramos en un escenario en el que para

conseguir un objetivo, tenemos diferentes formas de afrontarlo.

Page 2: Patron Estrategia - Version Final

Patrón de Diseño Estrategia

El patrón Estrategia

Es un patrón de diseño para el desarrollo de software. Se clasifica como Patrón

de Comportamiento (GoF) porque determina como se debe realizar el

intercambio de mensajes entre diferentes objetos para resolver una tarea. El

Patrón Estrategia permite mantener un conjunto de algoritmos de entre los

cuales el objeto cliente puede elegir aquel que le conviene e intercambiarlo

dinámicamente según sus necesidades. Con otras palabras, Define una familia

de algoritmos, los encapsula en clases distintas, y los hace intercambiables.

¿Quién usa el patrón Estrategia?

Cualquier programa que ofrezca un servicio o función determinada, que pueda

ser realizada de varias maneras, es candidato a utilizar el patrón estrategia.

Puede haber cualquier número de estrategias y cualquiera de ellas podrá ser

intercambiada por otra en cualquier momento, incluso en tiempo de ejecución. Si

muchas clases relacionadas se diferencian únicamente por su comportamiento,

se crea una superclase que almacene el comportamiento común y que hará de

interfaz hacia las clases concretas.

Si un algoritmo utiliza información que no deberían conocer los clientes, la

utilización del patrón estrategia evita la exposición de dichas estructuras.

Aplicando el patrón a una clase que defina múltiples comportamientos mediante

instrucciones condicionales, se evita emplear estas instrucciones, moviendo el

código a clases independientes donde se almacenará cada estrategia.

Este patrón de diseño nos sirve para intercambiar un sin número de estrategias

posibles. Un algoritmo puede ser considerado una estrategia y de ahí el origen

del nombre del patrón.

Page 3: Patron Estrategia - Version Final

Las aplicaciones donde el patrón de diseño estrategia puede resultar útil son en:

- Una aplicación para comprimir archivos que permite al usuario seleccionar

el tipo de compresión.

- Una aplicación donde la naturaleza de los datos que serán ordenados

determina el algoritmo de ordenamiento.

Participantes:

Contexto (Context):

Es el elemento que usa los algoritmos. Configura una estrategia

concreta mediante una referencia a la estrategia necesaria. Puede definir

una interfaz que permita a la estrategia el acceso a sus datos en caso de

que fuese necesario el intercambio de información entre el contexto y la

estrategia. En caso de no definir dicha interfaz, el contexto podría pasarse

a sí mismo a la estrategia como parámetro.

Estrategia

(Strategy): Declara una interfaz común para todos los algoritmos

soportados. Esta interfaz será usada por el contexto para invocar a la

estrategia concreta.

Estrategia Concreta (ConcreteStrategy): Implementa el algoritmo utilizando la interfaz definida por la

estrategia.

Page 4: Patron Estrategia - Version Final

Consecuencias:

Desventajaso La mayor parte de los problemas que nos podemos encontrar al usar

patrones de diseño vienen de no ser capaces de reconocer en qué contextos hay que aplicarlos.

o Menor eficiencia. Cuando el aumento del número de objetos

creados sea gestionado por el hilo principal de nuestro programa. Donde el tiempo real o la velocidad de respuesta y el poco consumo de recursos jueguen un papel importante.

Ventajaso Cumple el principio SOLID de Open/Closed, el cual señala que el

código debe estar abierto a la extensión, pero cerrado a la modificación.

o Ayuda a factorizar funcionalidad común de los algoritmos.

o No es exclusivo de c# o la plataforma .Net, puede ser usado con

diferentes lenguajes de programación, como por ejemplo Javascript.

o Herencia estática al sub-clasificar el Context ya que da facilidad a la

comprensión, al mantenimiento y a la ampliación de más funcionalidades (extensión).

Aplicación:

Usa el Patrón Estrategia cuando:

o Varias clases relacionadas sólo difieren en su comportamiento. El

Patrón Estrategia permite configurar a una clase con uno de entre

varios comportamientos.

o Se necesiten variantes del mismo algoritmo, que se implementan

como una jerarquía de clases.

o Un algoritmo usa datos que los clientes no tienen por qué conocer

(ej. estructuras de datos específicas del algoritmo)

o Una clase define muchos comportamientos que aparecen en

sentencias condicionales →mover los relacionados a un Estrategia.

Page 5: Patron Estrategia - Version Final

Estructura típica del Patrón Estrategia:

Strategy (Compositor):

o Define una interfaz común a los algoritmos que soporta.

ConcreteStrategy (SimpleCompositor, TeXCompositor,

ArrayCompositor):

o Implementa un algoritmo usando la interfaz Strategy.

Context (Composition):

o Está configurado con un objeto ConcreteStrategy.

o Mantiene una referencia al objeto Strategy.

o Puede definir una interfaz que le permita a Strategy acceder a sus

datos.

Page 6: Patron Estrategia - Version Final

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.