Strategy (patrón de diseño)
De Wikipedia, la enciclopedia libre
Strategy (Estrategia) es un patrón de diseño para el desarrollo de software.
El patrón Strategy permite mantener un conjunto de algoritmos de los que el objeto cliente puede elegir aquel que le conviene e intercambiarlo según sus necesidades.
Los distintos algoritmos se encapsulan y el cliente trabaja contra un objeto contexto o Context. Como hemos dicho, el cliente puede elegir el algoritmo que prefiera de entre los disponibles o puede ser el mismo objeto Context el que elija el más apropiado para cada situación.
Cualquier programa que ofrezca un servicio o función determinada, que pueda ser realizada de varias maneras, es candidato a utilizar el patrón Strategy. 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.
[editar] Aplicación
public abstract class EstrategiaDibujo extends JFrame { protected float[] x,y; protected Color c; protected int width,height; public EstrategiaDibujo(String titulo) { .... } public abstract void plot(float[] px, float[] py); ...... }
Lo importante de esta clase es que cada una de las estrategias que diseñemos tendrá que sobrescribir el método plot() y proveer un algoritmo concreto para dicha estrategia.
El contexto es la clase que decide que estrategia utilizar en cada momento, la decisión se realiza normalmente mediante algún parámetro que le envía el cliente aunque como hemos dicho puede ser él mismo el que elija la estrategia más adecuada :
public class Contexto { private EstrategiaDibujo estrategia; float[] x,y; public Contexto() { // Establecer estrategia por defecto } public void setDibujoBarras() { estrategia = new EstrategiaDibujoBarras(); } public void setDibujoLineas() { estrategia = new EstrategiaDibujoLineas(); } .............. public void dibuja() { estrategia.plot(x,y); } }
Como podemos comprobar el funcionamiento de este patrón es muy simple y el añadir nuevas estrategias a nuestro programa es muy sencillo y apenas implica modificación de código alguna.
Patrones de Diseño |
---|
Creacionales: Abstract Factory | Builder | Factory Method | Prototype | Singleton | Secreton |
Estructurales: Adapter | Bridge | Composite | Decorator | Facade | Flyweight | Proxy |
De Comportamiento: Chain of Responsibility | Command | Interpreter | Iterator | Mediator | Memento | Observer | State | Strategy | Template Method | Visitor |