Patrones de diseño: Strategy

Hoy veremos un patrón poco conocido, llamado Strategy.


¿Qué nos permite realizar este patrón de diseño?

Nos permite definir familias de algoritmos, encapsularlos y hacerlos intercambiables.


Vamos a verlo con un ejemplo con un antivirus simple y avanzado, que tienen la misma función de analizar el pc.

Simple sería una de las familias de algoritmos y avanzado la otra.


Primeramente creamos la interfaz IEstrategia:

public interface IEstrategia {
    void analizar();
}

Ahora cremos las clases AnalisisSimple y AnalisisAvanzado, en las que ambas implementarán la interfaz IEstrategia.

public class AnalisisSimple implements IEstrategia {
	public void analizar() {
		method1();
		method2();
	}
}
public class AnalisisAvanzado implements IEstrategia {
	public void analizar() {
		method1();
		method2();
		method3();
		method4();
	}
}

Como vemos dependiendo de lo que queramos hacer tendremos unos métodos u otros, así que siempre reallizaremos la función de analizar, pero si es simple tendremos unos métodos y si es avanzado otros.


Ahora crearemos una clase llamada Contexto:

public class Contexto {
 private IEstrategia iestrategia;

 public Contexto(IEstrategia iestrategia) {
  this.iestrategia = iestrategia;
 }
 public void ejecutar() {
  this.iestrategia.analizar();
 }
}


Ahora, en la clase principal:

public class main {
 Contexto contexto = new Contexto(new AnalisisAvanzado());
 contexto.ejecutar();
}


Ahora, si el contexto cambia, y se pusiera un new AnalisisSimple, ejecutaría el antivirus simple, de esta forma podemos cambiar dependiendo de la elección del usuario.


Te permite cambiar el algoritmo, o familia de algoritmos de acuerdo a la necesidad del cliente.


Espero que te haya gustado, nos vemos en el próximo artículo, no olvides compartir :)




63 vistas

©2020 por Juanma Perez.