Patrón Diseño 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:
o Interfaz Strategy:
será aquella interfaz que define el nombre del método o métodos que conformarán
la estrategia.
o Clases Strategy
concretas: todas aquellas clases que implementen la interfaz Strategy dando
forma al algoritmo.
o 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).
o iArea: Interfaz en la
que definimos un método que nos ayudará a calcular el área de cualquier cuerpo
geométrico.
o 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.
o 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.
o 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.
o
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:
Patrón de Diseño State
Un patrón de diseño es una solución a un
problema de diseño. Para que una solución sea considerada un patrón debe poseer
ciertas características. Una de ellas es que resuelva problemas similares de
manera efectiva. Otra característica es que debe ser reutilizable.
Uno de los Patrones de Diseño muy importantes es el patrón de diseño State conocido como State (Estado, Objects for States), es un patrón de Comportamiento.
Uno de los Patrones de Diseño muy importantes es el patrón de diseño State conocido como State (Estado, Objects for States), es un patrón de Comportamiento.
El patrón de diseño State es capaz de permitir
que un objeto cambie su comportamiento de forma dinámica.Dentro de las
características de su paradigma dentro de la programación orientada a objetos
utiliza el polimorfismo, en este patrón tenemos la ventaja de que reducimos la
duplicación al eliminar el código innecesario.
El Patrón de Diseño State es un patrón de
comportamiento para objetos. Se debe usar si el comportamiento de un objeto
depende de su estado, y se ve modificado en tiempo de ejecución. Permite que un
objeto cambie su comportamiento cuando cambia su estado interno, tal y como si
el objeto cambiase de clase.
Funciones:
Encapsula un comportamiento dependiente del estado (State) en que nos encontremos se va a comportar de una manera o de otra.
Se podría aplicar en el monopoly para los jugadores, si estas en el estado bancarrota harás una cosa y si estas en juego otra. La diferencia que esto puede cambiar en tiempo de ejecución.
• Crea un objeto por cada estado posible del objeto que lo llama para que tenga diferentes comportamientos
• Varia su comportamiento ante los diferentes mensajes.
• Hace los cambios de estado explícitos.
• Localiza fácilmente las responsabilidades de los estados específicos
Por ejemplo: una alarma puede tener diferentes
estados, como desactivada, activada, en configuración. Definimos una interfaz
Estado, Alarma, y luego definimos los diferentes estados
Conclusiones:
El patrón STATE está pensado para que un programa sea escalable y fácil de manejar.
El diseño se puede aplicar en diferentes situaciones.
Mucha gente lo ha usado y han logrado tener éxito de él.
El patrón ha sido utilizado para la implementación y diseño de software de juegos.
Ejemplo Codigo
Imaginemos que vamos a un banco y cuando llegamos
nos colocamos en la fila de mostrador: si la misma esta abierta, seguiremos en
la fila. En cambio, si esta cerrada nos colocaremos en otra fila o tomaremos
alguna decisión acorde. Por otro lado, si vemos un cartel que dice
"enseguida vuelvo" quizás tenemos que contemplar el tiempo disponible
que tenemos. Es decir, para nosotros, el comportamiento de un banco cambia
radicalmente según el estado en el que se encuentre. Para estas ocasiones, es
ideal el uso de un patrón de estados.
El banco publica un método llamado atende() pero en
realidad la atención la realiza la ventanilla.
La ventanilla cambia su comportamiento según el
estado en que se encuentre. Por ejemplo, si esta cerrada, no hay atención
directamente. Por eso mismo, delega el método de atención a su estado y es este
mismo estado quién toma la decisión de atender o no.
No hay comentarios:
Publicar un comentario