Patron Estrategia - Version Final
-
Upload
javier-pinillos-marinos -
Category
Documents
-
view
11 -
download
0
description
Transcript of Patron Estrategia - Version Final
![Page 1: Patron Estrategia - Version Final](https://reader035.fdocuments.ec/reader035/viewer/2022071707/55cf8f11550346703b98960d/html5/thumbnails/1.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022071707/55cf8f11550346703b98960d/html5/thumbnails/2.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022071707/55cf8f11550346703b98960d/html5/thumbnails/3.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022071707/55cf8f11550346703b98960d/html5/thumbnails/4.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022071707/55cf8f11550346703b98960d/html5/thumbnails/5.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022071707/55cf8f11550346703b98960d/html5/thumbnails/6.jpg)
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.