Empezaremos con el patrón de diseño Strategy.
Definición Wikipedia: El patrón Estrategia (Strategy) es un patrón de diseño para el desarrollo de software. Se clasifica como patrón de comportamiento 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.
Dada una clase llamada Strategy tenemos dos clases hijas que tienen un método strategicMethod() cada una con diferentes implementaciones, caso claro de Polimorfismo. Después desde la clase Context podremos escoger en setStrategy() que clase hija y implementacion nos interesa más. Al instanciar en Context la clase hija que queramos, la ConcreteStrategy escogida, dispondremos de sus funcionalidades. También cabe destacar la posibilidad de cambiar cuando queramos de estrategia instanciando en Context otra ConcreteSrategy.
![](http://upload.wikimedia.org/wikipedia/commons/3/32/Strategy_Pattern.jpg)
Ejemplo:
public class CreadorDibujos { private EstrategiaDibujo _estrategia; private float[] _x,_y; public CreadorDibujos() { // Establecer estrategia por defecto. } public void establecerDibujoBarras() { _estrategia = new EstrategiaDibujoConcreta1(); } public void establecerDibujoLineas() { _estrategia = new EstrategiaDibujoConcreta2(); } .............. public void dibuja() { _estrategia.dibujar(_x,_y); } }
public abstract class EstrategiaDibujo extends JFrame { private float[] _x,_y; private Color _c; private int _ancho,_alto; public EstrategiaDibujo() { } public abstract void dibujar(float[] px, float[] py); }
public class EstrategiaDibujoConcreta1 extends EstrategiaDibujo{ //... public void dibujar(float[] px, float[] py){ ... } //... }
public class EstrategiaDibujoConcreta2 extends EstrategiaDibujo{ //... public void dibujar(float[] px, float[] py){ ... } //... }