Strategy - Tensho97/Aprende-a-Aprender GitHub Wiki
Patrón Strategy
Intención y Ventajas
Intención:
- Encapsular algoritmos relacionados en clases y hacerlos intercambiables.
- Se permite que la selección del algoritmo se haga según el objeto que se trate.
Ventajas:
-
Se permite cambiar el algoritmo dinamicamente.
-
Se eliminan sentencias condicionales para seleccionar el algoritmo deseado.
Funcionamiento
ConcreteStrategyA y ConcreteStrategyB, en el ejemplo, hacen lo mismo, pero emplean distinta metodología para llegar al resultado.
Llevado a código
class Cliente {
Strategy s;
//PARA SELECCIONAR EL ALGORITMO
//SE ASIGNA A s LA INSTANCIA
//DE LA SUBCLASE QUE LO IMPLEMENTA
Cliente(Strategy str){
s = str;
}
//EL Cliente SIEMPRE SE EJECUTARA ASI:
s.operac();
}
Para crear el objeto cliente:
class ... (){
...
Cliente c = new Cliente(new StrConcr1());
//Se indica cual es el algoritmo que se ejecutará
...
}
Con este patrón se puede evitar código del tipo:
class Cliente{
if(cond1) operc1();
else if (cond2) orperac2();
else ...
}
Ademas si se quisiera añadir una nueva forma de ejecutar operc() entonces HABRÍA QUE CAMBIAR EL CÓDIGO DE LA CLASE Cliente.
Autor: Miguel