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

Patrón Strategy

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