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 :)